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

Jas*_*son 202 wordpress jquery function wrapper typeerror

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

$(document).ready(function(){

    // jQuery code is in here

});
Run Code Online (Sandbox Code Playgroud)

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

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

TypeError:$不是函数

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

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

(function($){

    // jQuery code is in here

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

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

任何帮助将不胜感激.

Exp*_*lls 307

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

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

如果你必须使用document.ready,你实际上可以$进入函数调用:

jQuery(function ($) { ...
Run Code Online (Sandbox Code Playgroud)

  • 或者简单地说(function($){// jQuery code here})(jQuery); (17认同)

Mat*_*rte 142

这应该解决它:

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

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

从他们的文件:

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

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


小智 24

这个解决方案对我有用

;(function($){
    // your code
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

将代码移到闭包内,$而不是使用jQuery

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

...搜索过多后

  • 很棒的解决方案.这个工作的主要原因是因为**";"**关闭了已经激活的jquery的任何其他实例,同时它在本地声明另一个新的jquery.当你只有几秒钟的时间来实现生产中的布局或许多wordpress插件运行时,它可以做得很好.但是,请注意你必须解决这个问题,这只是一个创可贴,但如果它是一个信息页面就可以了. (2认同)

Ash*_*war 19

你可以避免这样的冲突

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

  • 或者$ = jQuery.noConflict(); (7认同)

opt*_*tes 17

var $=jQuery.noConflict();

$(document).ready(function(){
    // jQuery code is in here
});
Run Code Online (Sandbox Code Playgroud)

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


Jos*_*tes 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>
Run Code Online (Sandbox Code Playgroud)


Jit*_*mor 8

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

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

// jQuery code is in here

});
</script>
Run Code Online (Sandbox Code Playgroud)

  • 这与上面给出的答案有什么不同(从三年前开始)? (3认同)

小智 8

jQuery(document).
Run Code Online (Sandbox Code Playgroud)

代替

$(document).
Run Code Online (Sandbox Code Playgroud)

或者

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

(function ($) {
   $(document).
}(jQuery));
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

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


Sha*_*nus 7

(函数( $ ) {
  “严格使用”;

  $(函数(){

    //你的代码在这里

  });

}(jQuery));


小智 7

像这样替换$符号jQuery

jQuery(function(){
//your code here
});
Run Code Online (Sandbox Code Playgroud)


Pbx*_*Man 5

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

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


Ren*_*unt 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);
Run Code Online (Sandbox Code Playgroud)

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