Joh*_*n T 1 javascript wordpress jquery
我正试图在基于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 ....
Run Code Online (Sandbox Code Playgroud)
当我加载我的页面时,我在Firebug中收到错误"TypeError:$ is undefined"
经过一番谷歌搜索,我改变了所有的$.进入jQuery.
这解决了一些问题,但我得到关于该行的错误:
$this = $(this);
Run Code Online (Sandbox Code Playgroud)
我假设我没有为jquery定义$.我尝试在函数顶部添加一行:
$ = jQuery;
Run Code Online (Sandbox Code Playgroud)
但那没用.
任何想法如何让我的行为?
我有另一个脚本,包含在:
(function($){ jQuery(document).ready(function($){
// code in here
}); })(jQuery);
Run Code Online (Sandbox Code Playgroud)
但是tabcordion的结尾有:
(function($) {
// tabcordion code....
}).call(this);
Run Code Online (Sandbox Code Playgroud)
而"召唤(这个)"有点让我失望?
有任何想法吗?
$除了包含jQuery之外,您不必为jQuery定义任何内容.该定义是jQuery脚本的一部分.
此错误告诉您三件事之一.或者:
在包含插件之前你没有包含jQuery(或者你尝试失败,例如404),或者
在加载$符号的jQuery之后加载其他东西,或者
你正在打电话jQuery.noConflict(),释放$符号.
根据你$ = jQuery;没有工作的尝试,我会说它是#1.因此,请确保脚本标记位于正确的位置,并确保您没有收到404错误(或类似).
评论后更新:
我正在使用一个名为"使用谷歌库"的插件.这是在运行后调用jQuery.noConflict().
首先,Wordpress插件调用noConflict对我来说似乎是一个坏主意.同样,tabcordian不应该依赖于$符号; 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);
Run Code Online (Sandbox Code Playgroud)
Re tabcordian的使用.call(this)困惑了你:
(function() {
// ...tabcordian source...
}).call(this);
Run Code Online (Sandbox Code Playgroud)
如果你没有在函数中使用严格模式,这是完全没有意义的,而tabcordian则不是.(如果您正在使用严格模式,这是一种方法,使this继续引用全局对象函数内).但作为源从CoffeeScript的产生,这可能是样板CoffeeScript的东西,它可能这样做,以支持严格模式.
| 归档时间: |
|
| 查看次数: |
20291 次 |
| 最近记录: |