问题描述

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

$(document).ready(function(){

    // jQuery code is in here

});

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

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

TypeError: $ is not a function

$(document).ready(function(){

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

(function($){

    // jQuery code is in here

})(jQuery);

我有这个错误了很多次,不知道该怎么处理。

任何帮助将不胜感激。

最佳解决方案

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

你的 function 的解决方案可以正常工作,或者你可以用其他方式加载 jQuery(但这在 Wordpress 中可能不是一个好主意) 。

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

jQuery(function ($) { ...

次佳解决方案

这应该解决它:

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

简单地说,WordPress 可以运行自己的脚本,然后才能释放 $ var,这样它就不会与其他库冲突。这是非常有意义的,因为 WordPress 用于各种网站,应用程序,当然还有博客。

从他们的文档:

The jQuery library included with WordPress is set to the noConflict() mode (see wp-includes/js/jquery/jquery.js). This is to prevent compatibility problems with other JavaScript libraries that WordPress can link.

In the noConflict() mode, the global $ shortcut for jQuery is not available…

第三种解决方案

这个解决方案适用于我



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

将代码移动到闭包中,并使用 $而不是 jQuery

我在 https://magento.stackexchange.com/questions/33348/uncaught-typeerror-undefined-is-not-a-function-when-using-a-jquery-plugin-in-ma 中找到了上述解决方案

经过扫荡太多

第四种方案

你可以避免这样的冲突

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

第五种方案

尝试这个:

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

第六种方案

你必须通过 $ in function()

<script>
jQuery(document).ready(function($){

// jQuery code is in here

});
</script>

第七种方案

var $=jQuery.noConflict();

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

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

第八种方案

仔细检查你的 jQuery 引用。你可能会不止一次地引用它,或者你早点调用函数 (在定义 jQuery 之前) 。您可以按照我的评论中的提到,并将任何 jQuery 引用放在文件的顶部 (在头上),看看是否有帮助。

如果您使用 jQuery 的封装,在这种情况下不会有帮助。请尝试,因为我认为它更漂亮,更明显,但如果没有定义 jQuery,您将得到相同的错误。

最后… jQuery 当前没有定义。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。