问答中心分类: WORDPRESSWordPress 如何使用 jquery 和 $ 符号
0
匿名用户 提问 1小时 前

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

$(document).ready(function(){

    // jQuery code is in here

});

我从 WordPress 仪表板中调用此脚本,并在 jQuery 框架加载后加载它。
当我在 Firebug 中检查页面时,我不断收到错误消息:

类型错误:$ 不是函数
$(文档).ready(函数(){

我是否应该将脚本包装在此函数中:

(function($){

    // jQuery code is in here

})(jQuery);

我已经多次遇到此错误,不知道如何处理它。
任何帮助将不胜感激。

zerkms 回复 1小时 前

如果你输入$在控制台中按回车键 – 你看到了什么?

zerkms 回复 1小时 前

在控制台中运行 $ 时,我收到“未定义”

16 Answers
0
Matthew Blancarte 回答 1小时 前

这应该解决它:

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)。这是为了防止与 WordPress 可以链接的其他 JavaScript 库的兼容性问题。
在 noConflict() 模式下,jQuery 的全局 $ 快捷方式不可用…

0
Bikram Shrestha 回答 1小时 前

这个解决方案对我有用

;(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
…在搜索太多之后

Luis 回复 1小时 前

很棒的解决方案。这有效的主要原因是因为“;”关闭已经激活的任何其他 jquery 实例,同时在本地声明另一个新实例。当您只有几秒钟的时间在生产中实现布局或运行大量的 wordpress 插件时,这可以做得很好。但是,请注意,您必须解决问题,这只是一个创可贴,但如果它是一个信息页面,就可以了。

Bikram Shrestha 回复 1小时 前

@Martha James 这对我有用,所以包括在内。它可能适用于其他人,也可能不适用

0
optimiertes 回答 1小时 前
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/

0
Ashwani Panwar 回答 1小时 前

你可以避免这样的冲突

var jq=jQuery.noConflict();
jq(document).ready(function(){  
  alert("Hi this will not conflict now");
  jq('selector').show();
});
Cyssoo 回复 1小时 前

或 $=jQuery.noConflict();

0
Jose Carlos Ramos Carmenates 回答 1小时 前

尝试这个:

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