我知道jQuery已加载,因为我可以将$切换为“ jQuery”,并且一切正常,但是如果我不能解决这个问题,这将是一个混乱的脚本

此脚本:

 jQuery(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })
});
 


产生错误$ is not a function

此脚本:

 jQuery(document).ready(function(){
    jQuery("ul.vimeo_desc_feed li a").click(function(){
        alert(jQuery(this).attr('href'));
        return false;
    })
});
 


工作正常。

#1 楼

您可以将JavaScript包装在一个自调用函数中,然后使用jQuery作为本地变量名称将$作为参数传递给它。例如:

(function($) {
  $(document).ready(function(){
    $("ul.vimeo_desc_feed li a").click(function(){
      alert($(this).attr('href'));
      return false;
    })
 });
}(jQuery));


应按预期工作。

如果我没记错的话,WP提供的jQuery版本(您wp_enqueue_script('jquery'))立即将jQuery置于无冲突状态,从而导致$不确定。

评论


啊,我明白了。我曾经手动添加它,这解释了为什么我没有遇到这个问题。

–轻度绒毛
2010-10-14 15:46

谢谢,我在开头而不是结尾使用jQuery的替代格式。但是我不知道如何返回值,在这种格式下,我只是在self-invoking函数之前添加return,并且它可以正常工作。

–eselk
15年1月15日在18:08

非常有用的答案。

– MarkSkayff
17年11月1日在20:04

#2 楼

您就快到了!

jQuery(document).ready(function($){
    $("ul.vimeo_desc_feed li a").click(function(){
        alert($(this).attr('href'));
        return false;
    })

});


您必须将对jQuery的引用作为$函数传递到您的方法中,否则它将无法正常工作。如果像我上面那样在第一个function()调用中放入$,一切都会正常进行。

评论


+1:这比将jQuery放在末尾更具可读性。

– fuxia♦
2010-10-14 17:42

...但这不是执行匿名功能的标准方法。 forum.jquery.com/topic/jquery-anonymous-function-calls

– BryanH
2010-10-14 23:55



是的,没有。它们都被认为是“标准”的方式。创建一个在本地定义了$的单例类。另一个只是为文档的ready事件定义一个处理程序,并将jQuery对象作为$传递给该处理程序。如果您尝试挂起ready事件,则第二种方法使用更广泛。如果您出于其他目的需要jQuery(例如,挂接到$ .browser),则可以使用singleton类。

–EAMann
10-10-15在1:39

+1 jQuery(document).ready(function($){...关于jQuery和WordPress的mor信息,您也可以在我的文章中阅读:wpengineer.com/2028/small-tips-using-wordpress-and-jquery。

– Bueltge
2010-10-15 12:46



#3 楼

将函数传递给jQuery是$(document).ready(...)的简写,然后通过将$作为回调的第一个参数,可以在该回调中为jQuery创建别名:
请参阅此处的文档。