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
…搜索得太多之后
尝试这个:
<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));