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

问题描述 投票:187回答:16

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

$(document).ready(function(){

    // jQuery code is in here

});

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

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

TypeError:$不是函数

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

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

(function($){

    // jQuery code is in here

})(jQuery);

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

任何帮助将不胜感激。

jquery wordpress function wrapper typeerror
16个回答
290
投票

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

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

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

jQuery(function ($) { ...

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/


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>

4
投票
(function( $ ) {
  "use strict";

  $(function() {

    //Your code here

  });

}(jQuery));

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

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

现在使用jq代替jQuery


3
投票

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


3
投票

使用

jQuery(document).

代替

$(document).

要么

在函数中,$指向jQuery,正如您所期望的那样

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

2
投票

您可以使用

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

要么

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

139
投票

这应该解决它:

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的全局$快捷方式不可用...


22
投票

这个解决方案对我有用

;(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找到了上述解决方案

...搜索过多后


19
投票

你可以避免这样的冲突

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

16
投票
var $=jQuery.noConflict();

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

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


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>

8
投票

你必须在函数中传递$()

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

// jQuery code is in here

});
</script>

7
投票

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

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

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


6
投票

$替换jQuery标志,如下所示:

jQuery(function(){
//your code here
});
© www.soinside.com 2019 - 2024. All rights reserved.