我正在尝试在基于wordpress的网站上的jquery中使用“ tabcordion”库. Tabcordion javascript文件正在“入队”,并出现在jquery文件之后(这样看起来就可以了).
jQuery代码的开头是:
(function($) {
var Tabcordion;
$.fn.tabcordion = function(option) {
return this.each(function() {
var $this, data, options;
$this = $(this);
// rest of code ....
当我加载页面时,在Firebug中收到错误“ TypeError:$is undefined”
经过一番谷歌搜索,我改变了所有的$. jQuery.
$this = $(this);
我假设我没有为jquery定义$.我尝试在函数顶部添加一行:
$= jQuery;
但这没用.
有什么想法可以让$表现出来吗?
(function($){ jQuery(document).ready(function($){
// code in here
}); })(jQuery);
但是Tabcordion的结尾有:
(function($) {
// tabcordion code....
}).call(this);
而“ call(this)”位把我扔了吗?
有任何想法吗?
解决方法:
除了包括jQuery外,您无需做任何其他事情来为jQuery定义$.该定义是jQuery脚本的一部分.
此错误告诉您三件事之一.或者:
>在包含插件之前(或尝试失败,例如404),您尚未包含jQuery,或者
>您在加载接管$符号的jQuery之后加载其他内容,或者
>您正在调用jQuery.noConflict(),它将释放$符号.
基于您的$= jQuery;尝试不起作用,我会说这是第一名.因此,请确保确保script标记在正确的位置,并确保没有收到404错误(或类似错误).
发表评论后更新:
I’m using a plugin called “use google libraries”. That is calling jQuery.noConflict() after it has run.
首先,对我来说,一个名为noConflict的wordpress插件似乎是个坏主意.同样,烟草花店根本不应该依赖$符号. jQuery插件不得依赖$,因为人们可以使用noConflict!但是快速浏览一下tabcordian数据源,就可以看出它确实是这样做的:依靠$.
我建议分叉tabcordian并进行更正.在插件中执行此操作的通常方法是,以(function($){以})(jQuery);结尾,如下所示:
(function($) {
// plugin code here, can use $because it refers to our argument,
// not the global symbol that may not be there
})(jQuery);
重新Tabcordian使用.call(this)会使您感到困惑:
(function() {
// ...tabcordian source...
}).call(this);
如果您没有在函数中使用严格模式,那完全没有意义,而tabcordian则不是. (如果使用严格模式,则可以使它继续引用函数中的全局对象.)但是,由于该源是从CoffeeScript生成的,因此可能是CoffeeScript的样板,并且可能正在这样做以支持严格模式.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。