$未在WordPress中使用jQuery定义


32

我知道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;
    })
});

工作正常。

Answers:


42

您可以将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年

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

非常有用的答案。
MarkSkayff

32

你快到了!

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

});

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


4
+1:比jQuery末尾更具可读性。
fuxia

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

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

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

6

将函数传递给jQuery的快捷方式是$(document).ready(...)将其$作为回调的第一个参数,然后在该回调中为jQuery创建别名:

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

您可以在此处查看此文档。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.