TypeError:$在调用jQuery函数时不是函数

时间:2012-09-09 23:05:07

标签: jquery wordpress function wrapper typeerror

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

$(document).ready(function(){

    // jQuery code is in here

});

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

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

  

TypeError:$不是函数

     

(文档)$。就绪(函数(){

我是否可以将脚本包装在此函数中:

(function($){

    // jQuery code is in here

})(jQuery);

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

非常感谢任何帮助。

16 个答案:

答案 0 :(得分:283)

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

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

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

jQuery(function ($) { ...

答案 1 :(得分:135)

这应该解决它:

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

简单地说,WordPress会先运行自己的脚本,然后释放$ var,这样就不会与其他库冲突。这是完全合理的,因为WordPress用于各种网站,应用程序,当然还有博客。

从他们的文件:

  

WordPress附带的jQuery库设置为noConflict()   mode(参见wp-includes / js / jquery / jquery.js)。这是为了防止   与WordPress的其他JavaScript库的兼容性问题   可以链接。

     

在noConflict()模式下,jQuery的全局$快捷方式不是   可用...

答案 2 :(得分:21)

此解决方案适合我

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

中找到了上述解决方案

...搜索过多后

答案 3 :(得分:19)

你可以像这样避免冲突

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

答案 4 :(得分:16)

var $=jQuery.noConflict();

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

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

答案 5 :(得分:13)

试试这个:

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

答案 6 :(得分:8)

你必须在函数()

中传递$
.parent-classname p{
    /*style here*/
}

答案 7 :(得分:7)

仔细检查你的jQuery引用。您可能要么多次引用它,要么过早地调用函数(在定义jQuery之前)。你可以尝试我的评论中提到的,并将任何jQuery引用放在你的文件的顶部(在头部),看看是否有帮助。

如果使用jQuery的封装,在这种情况下应该没有用。请尝试一下,因为我觉得它更漂亮,更明显,但是如果没有定义jQuery,你会得到同样的错误。

最后...... jQuery目前尚未定义。

答案 8 :(得分:5)

$替换为jQuery 像这样:

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

答案 9 :(得分:5)

另外,我找到了使用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);

我从这里找到了这个解决方案。 https://thecodingstuff.com/how-to-properly-use-jquery-noconflict-mode-in-wordpress/

答案 10 :(得分:4)

什么对我有用。要导入的第一个库是查询库,然后调用jQuery.noConflict()方法。

<head>
 <script type="text/javascript" src="jquery.min.js"/>
 <script>
  var jq = jQuery.noConflict();
  jq(document).ready(function(){
  //.... your code here
    });
 </script>

答案 11 :(得分:4)

(function( $ ) {
  "use strict";

  $(function() {

    //Your code here

  });

}(jQuery));

答案 12 :(得分:3)

<script>
var jq=jQuery.noConflict();
(function ($) 
    {
    function nameoffunction()
    {
        // Set your code here!!
    }

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

现在使用jq代替jQuery

答案 13 :(得分:3)

当您的函数名称和文件中的某个ID名称相同时,您会遇到此问题。只需确保文件中的所有ID名称都是唯一的。

答案 14 :(得分:3)

使用

jQuery(document).

而不是

$(document).

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

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

答案 15 :(得分:2)

您可以使用

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

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