在编写jQuery插件时发生作用域冲突
scope collision while writing a jQuery plugin
我正试图写一个简单的jQuery插件,只是看看它是如何完成的。但我似乎不能同时运行两次。它基本上是一个倒数,它所做的就是获取div中的text()值然后倒数直到它达到1。
$('#box1').startCounter();
$('#box2').startCounter();
这个调用将函数内的两个this
变量都指向#box2。这是我的文件
在一个jQuery插件中this
是如何改变的,这很令人困惑。谢谢你的帮助:)
您在全局作用域中定义了$this
,因此当在第二个元素上调用startCount
时,该值将被覆盖。使用var
将其设置为本地:
var $this = this;
除了在元素中再次调用函数之外,您还可以这样做:
$.fn.startCount = function(count, div) {
count = (count) ? count : parseInt($('span.no-display',this).text());
var $target = $('div.counter', this);
var run = function() {
if (count <= 1) {
this.fadeOut().mouseout();
}
else {
count--;
$target.text(count);
setTimeout(run, 1000);
}
};
run();
}
演示2
并且使您的插件在$
不引用jQuery
(jQuery.noConflict()
)的环境中工作,您应该这样做:
(function($) {
$.fn.startCount = ...
}(jQuery));
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- 将作用域存储在JSON中
- 从控制器继承了隔离的作用域以生成可重用的指令
- 从ng模板访问作用域
- 调用私有作用域
- 对父作用域的指令更新延迟了一步
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- AngularJS指令隔离作用域
- Angularjs:修改js中的作用域,稍后在页面中使用
- 访问多个指令的隔离作用域
- Javascript作用域和Ajax调用;工作不正常
- 向Angular作用域对象添加对象数组——TypeError
- jQuery/Javascript作用域,可能是变量作用域冲突
- Coffeescript对象、jquery回调和变量作用域的冲突和混淆
- 2对象作用域相互冲突
- IE7和IE8的命名和作用域冲突
- 在编写jQuery插件时发生作用域冲突