WordPress如何使用jQuery和$符号

259

我在 WordPress 插件中有一个简单的 jQuery 脚本,它使用如下所示的 jQuery 包装器:

$(document).ready(function(){

    // jQuery code is in here

});

我正在WordPress仪表板中调用此脚本,并在jQuery框架加载后加载它。

当我使用Firebug检查页面时,我不断收到错误消息:

TypeError:$不是一个函数

$(document).ready(function(){

也许我应该在这个函数中包装脚本:

(function($){

    // jQuery code is in here

})(jQuery);

我遇到了这个错误好几次,但是不确定该如何处理。

非常感谢任何帮助。


3
如果在控制台中输入“$”并按回车键,你会看到什么? - zerkms
在控制台运行$时,我收到“未定义”消息。 - Jason
19个回答

365

在WordPress中,默认情况下,当你enqueue jQuery时,必须使用 jQuery ,而不使用 $ (这是为了与其他库兼容)。

将其包裹在 function 中的解决方案将运行良好,或者您可以以其他方式加载jQuery(但在WordPress中这可能不是一个好主意)。

如果您必须使用 document.ready,您实际上可以将 $ 传递到函数调用中:

jQuery(function ($) { ...

我尝试了第二个版本,但它没有起作用,第一个版本可以,但我只是想确保我没有重复调用jQuery。 - Jason
@Jason你甚至不需要那个,只需要我发布的链接:http://jsfiddle.net/vcbYJ/ - Explosion Pills
请问您能否查看这个问题:http://wordpress.stackexchange.com/questions/214858/how-to-hide-product-attribute-from-quick-edit-panel-woocommerce - user5742826
如果任何选择器在 jQuery(function ($) { ... 之外,您必须使用 jQuery 而不是 $ - Misha Rudrastyh

176
这应该可以解决问题:
jQuery(document).ready(function($){
  //you can now use $ as your jQuery object.
  var body = $( 'body' );
});
简单来说,WordPress 在你之前运行他们自己的脚本,并且释放了 $ 变量,以避免与其他库发生冲突。这非常有意义,因为 WordPress 用于各种网站、应用和博客。
根据他们的文档:
引入 WordPress 的 jQuery 库设置了 noConflict() 模式(参见 wp-includes/js/jquery/jquery.js)。这样可以避免 WordPress 可能链接的其他 JavaScript 库的兼容性问题。
在 noConflict() 模式下,jQuery 的全局 $ 快捷方式不可用...

34

2
太妙了。这个方案之所以可行,主要是因为“;”关闭了其他已激活的jQuery实例,同时在本地声明了一个新的jQuery实例。当你只有几秒钟时间在生产环境中实现布局,或者有大量的WordPress插件运行时,这个方案可以完成得很好。但是,请注意,你必须修复问题,这只是一种权宜之计,但如果这是一个信息页面,那就没关系。 - Luis
@玛莎·詹姆斯 这个方法对我有效,所以我包含了它。但它可能对其他人无效。 - Bikram Shrestha

33

22

你可以避免这样的冲突

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  alert("Hi this will not conflict now");
  jq('selector').show();
});

9
或者 $ = jQuery.noConflict(); - Cyssoo

14

试试这个:

<script language="JavaScript" type="text/javascript" src="jquery/jquery.js"></script>
<script>
    jQuery.noConflict();
    (function ($) {
        function readyFn() {
            // Set your code here!!
        }

        $(document).ready(readyFn); 
    })(jQuery);

</script>

11

另外,我发现使用jQuery noConflict模式的好方法。

(function($){

  $(document).ready(function(){
      // write code here
  });

  // or also you can write jquery code like this

  jQuery(document).ready(function(){
      // write code here
  });

})(jQuery);

我从TryVary.com这里找到了解决方案。


10

$符号替换为jQuery,像这样:

jQuery(function(){
//your code here
});

9
您需要在 function() 中传递 $。
<script>
jQuery(document).ready(function($){

// jQuery code is in here

});
</script>

4
这与上面给出的答案(三年前的)有什么不同? - rnevius

9

使用

jQuery(document).

替代

$(document).

在这个函数中,$指向了预期的jQuery对象。

(function ($) {
   $(document).
}(jQuery));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接