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

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

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

我在WordPress Dashboard中调用这个脚本,并在加载jQuery框架之后加载它。

当我检查Firebug中的页面时,我经常收到错误信息:

TypeError:$不是一个函数

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

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

 (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用于各种网站,应用程序,当然还有博客。

从他们的文档:

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

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

你可以避免像这样的冲突

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

这个解决方案为我工作

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

…搜索得太多之后

尝试这个:

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

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

 <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目前没有定义。

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

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

现在使用jq代替jQuery

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

使用

 jQuery(document). 

代替

 $(document). 

要么

在这个函数中,$就像你期望的那样指向jQuery

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