我在WordPress插件中有一个简单的jQuery脚本,它使用jQuery包装器,像这样:

$(document).ready(function(){

    // jQuery code is in here

});

我从WordPress仪表板内调用这个脚本,并在jQuery框架加载后加载它。

当我在Firebug中检查页面时,我不断地收到错误消息:

$不是一个函数 $(文档)时函数(){

我是否应该在这个函数中包装脚本:

(function($){

    // jQuery code is in here

})(jQuery);

我有这个错误相当多次,我不知道如何处理它。

任何帮助都将不胜感激。


当前回答

wp_enqueue_script( string $handle, string $src = '', string[] $deps = array(), string|bool|null $ver = false, bool $in_footer = false )

如果你使用jquery作为前端,你可以通过jquery传递$deps来实现

其他回答

这应该解决它:

jQuery(document).ready(function($){
  //you can now use $ as your jQuery object.
  var body = $( 'body' );
});

简单地说,WordPress在你之前运行他们自己的脚本,他们发布了$ var,所以它不会与其他库冲突。这是完全有道理的,因为WordPress被用于各种各样的网站、应用程序,当然还有博客。

从他们的文档来看:

WordPress包含的jQuery库被设置为noConflict() 模式(参见wp-includes/js/jquery/jquery.js)。这是为了防止 与其他JavaScript库的兼容性问题 可以链接。 在noConflict()模式下,jQuery的全局$快捷方式不是 可用……

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

将它包装在函数中的解决方案可以很好地工作,或者您可以以其他方式加载jQuery(但在Wordpress中这可能不是一个好主意)。

如果你必须使用文件。准备好了,你可以将$传递到函数调用中:

jQuery(function ($) { ...
var $=jQuery.noConflict();

$(document).ready(function(){
    // jQuery code is in here
});

感谢Ashwani Panwar和Cyssoo回答:https://stackoverflow.com/a/29341144/3010027

在WordPress中使用jQuery而不是$的原因:https://pippinsplugins.com/why-loading-your-own-jquery-is-irresponsible/

Use

jQuery(document).

而不是

$(document).

or

在函数中,$如您所料指向jQuery

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

试试这个:

<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>