TypeError:$ 不是 WordPress 的函数
Posted
技术标签:
【中文标题】TypeError:$ 不是 WordPress 的函数【英文标题】:TypeError: $ is not a function WordPress 【发布时间】:2012-08-28 19:20:46 【问题描述】:我购买的主题中的.js
文档可能有错误:
$('.tagcloud a').wrap('<span class="st_tag" />');
我正在尝试解决它,但我不是程序员,所以我不知道如何解决。 网站是这样的:http://www.framerental.com。
【问题讨论】:
老实说,如果您已经为主题付费并且您没有对您的网站进行很多其他自定义(因为您毕竟不是程序员)我会联系他们的支持 在我看来,我现在可以在较新版本的 wp 中使用 $fine 【参考方案1】:jQuery 可能会丢失。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
【讨论】:
这是可能的,但 wordpress 和大多数 CMS 默认情况下没有设置 $。【参考方案2】:如果你已经包含了 jQuery,可能会有冲突。尝试使用jQuery
而不是$
。
【讨论】:
【参考方案3】:你使用jQuery.noConflict();
所以$
是未定义的。
您可以在此处阅读更多信息docs
尝试用这种方式修改你的代码(在准备函数中添加$
符号):
jQuery(document).ready(function($)
// Code that uses jQuery's $ can follow here.
);
【讨论】:
好的!现在有些工作,但出现了其他错误: Referenceerror resiza window is not defined。行:jQuery(window).bind("resize", resizeWindow);函数 resizeWindow( e ) var newWindowWidth = jQuery(window).width(); 尝试在绑定表达式之前定义函数。 在我注释掉主题的旧“排队”jQuery 之后,这修复了我使用旧 WP 主题的所有错误。坦率地说,我发现“wp_enqueue_script”系统真的很烦人、做作、过于复杂和不必要。我希望 WordPress 能够为管理面板隐藏/划分自己的 js 代码,并让我们以我们想要的方式使用 jQuery。 “wp_enqueue_script”是否通过了 Google PageSpeed Insight 测试?可能不是。或者只是要求所有 WP 插件和主题使用相同的 jQuery——然后每个人都会在同一个页面上,我们可以一起前进。 我也与 WP 的 enqueue 方法进行了斗争,但现在已经接受了它。它保持最佳实践,您只需在模板中添加带有链接标签的脚本,就可以很容易地忽略它。 WP enqueue 的 jQuery 自动,所以你必须使用 dequeue。 WP 还具有本地化功能,在结合脚本以提高页面速度方面值得研究。 这应该是公认的答案。唯一对我有用的东西!【参考方案4】:要么你不包括 jquery toolkit/lib,正如一些人所建议的那样,要么存在某种冲突。测试:包括 jQuery 并像这样测试:
console.log($);
console.log($ === jQuery);
如果$
不是未定义的,并且$ === jQuery
记录为false,那么您肯定会遇到冲突。用jQuery
替换你的$
可以解决这个问题,但这可能非常乏味(所有额外的输入......)。通常我以$jq = _$ = jQuery;
开始我的脚本,以至少对jQuery 对象有一个更短的引用。 当然,在您这样做之前,请检查您是否不小心覆盖了预先设置的变量:console.log($jq, _jQ, _$);
以 not 为准课程
【讨论】:
Elias 你似乎有答案,但只要我不是程序员,我觉得你在用中文说话。对我来说有什么简单的解决方案吗?我完全迷路了:-( @user1645326:是的,有。您在 jurka 答案下方的评论告诉我,您要么没有在包装器jQuery(document).ready(function($)
函数中编写所有 jQ 代码,而是应该这样做。此外,resizeWindow
应该从 $(this).width();
而不是 jQuery(window).with();
获得它,但也许最重要的是:错误说明了一切:您的代码中有一个错字:只需在您的代码中搜索 resiza window
,并将其替换为resizeWindow
...【参考方案5】:
功能错误在几乎所有内容管理系统中都很常见,有几种方法可以解决此问题。
使用以下方法包装您的代码:
<script>
jQuery(function($)
YOUR CODE GOES HERE
);
</script>
你也可以通过noConflict();
来使用jQuery的API
<script>
$.noConflict();
jQuery( document ).ready(function( $ )
// Code that uses jQuery's $ can follow here.
);
// Code that uses other library's $ can follow here.
</script>
另一个使用 noConflict 而不使用 document ready 的例子:
<script>
jQuery.noConflict();
(function( $ )
$(function()
// YOUR CODE HERE
);
);
</script>
您甚至可以选择创建自己的别名以避免这样的冲突:
var jExample = jQuery.noConflict();
// Do something with jQuery
jExample( "div p" ).hide();
另一个更长的解决方案是将 $ 的所有引用重命名为 jQuery:
$( "div p" ).hide();
到 jQuery( "div p" ).hide();
【讨论】:
【参考方案6】:只需添加这个:
<script>
var $ = jQuery.noConflict();
</script>
到 header.php 中的 head 标签。或者,如果您想在管理区域(或不使用 header.php 的地方)中使用美元符号,就在您要使用它的地方之前。
(可能存在一些我不知道的冲突,请对其进行测试,如果有,请使用此处或以下链接提供的其他解决方案。)
来源:http://www.wpdevsolutions.com/use-the-dollar-sign-in-wordpress-instead-of-jquery/
【讨论】:
如果您将自己的自定义主题脚本排入页脚,则此方法有效。【参考方案7】:不要这样做:
$(document).ready(function() );
你应该这样做:
jQuery(document).ready(function($)
// your code goes here
);
这是因为 WordPress 可能在将来或现在将 $ 用于 jQuery 以外的其他东西,因此您需要以 $ 只能在 jQuery 文档就绪回调中使用的方式加载 jQuery。
【讨论】:
这适用于 doc.ready 中的任何内容。如果您想要全面(窗口功能),请查看上面 Savage 的答案。【参考方案8】:我添加了一个在head
部分末尾加载的自定义脚本文件,并在顶部插入了以下内容:
(function (jQuery)
window.$ = jQuery.noConflict();
)(jQuery);
(这是对 Fanky 答案的修改)
【讨论】:
【参考方案9】:除了 noConflict,这也很有帮助:
(function( $ )
// Variables and DOM Caching using $.
var body = $('body');
console.log(body);
)( jQuery );
【讨论】:
【参考方案10】:我能够很容易地解决这个我简单的排队 jQuery
wp_enqueue_script("jquery");
【讨论】:
【参考方案11】:有一种简单的方法可以修复它。只需安装 plugin 并激活它。更多信息:https://www.aitlp.com/wordpress-5-3-is-not-a-function-fix/.
使用 Wordpress 5.3 版测试。
【讨论】:
【参考方案12】:我在 WordPress 网站中遇到了与 jquery 相同的问题,我通过重新排列脚本解决了这个问题。
如果 aowl 首先在我的网站中加载,那么我会在问题中提及错误。
并确保 jquery 在 aowl carousel 脚本之前首先加载,然后添加下面的代码,错误不应出现。希望它可以在将来对某人有所帮助。
jQuery(document).ready(function($)
// Code that uses jQuery's $ can follow here.
);
【讨论】:
VsCode 告诉我们上面的代码从 3.0 开始就被弃用了。它推荐使用 jQuery(function() )以上是关于TypeError:$ 不是 WordPress 的函数的主要内容,如果未能解决你的问题,请参考以下文章
Slick slider ().slick 不是 Wordpress PHP 的函数
Uncaught TypeError: jQuery(...).fancybox is not a function|wordpress中使用的fancybox
#wordpress 中JQuery使用问题 报错:Uncaught TypeError: $ is not a functionwordpress问题记录
解决wordpress 5.3更新后Uncaught Typeerror: $ is not a function
Uncaught TypeError: jQuery(...).each is not a function after update wordpress theme