Javascript 多次调用jQuery插件时,SetInterval会发生冲突
我正在开发一个自定义jQuery插件,它利用了SetInterval,但是当它被多次调用时就会中断 我有类似这样的东西:Javascript 多次调用jQuery插件时,SetInterval会发生冲突,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我正在开发一个自定义jQuery插件,它利用了SetInterval,但是当它被多次调用时就会中断 我有类似这样的东西: (function($){ $.fn.myplugin = function(options) { var defaults = {}; var options = $.extend(defaults, options); var interval; this.each(function() {
(function($){
$.fn.myplugin = function(options) {
var defaults = {};
var options = $.extend(defaults, options);
var interval;
this.each(function() {
//etc.
interval = setInterval(function(){ doMyOtherFunc(options); }, 1000);
});
function doMyOtherFunc(options) {
//etc
}
}
})(jQuery);
如果我只调用一次功能,它就会按预期工作,但如果我在第二个元素上再次调用它,它就会中断
$('#myelement').myplugin({'option1', 'option2'});
$('#myotherelement').myplugin({'option1', 'option2'});
不知何故,第二个实例中的间隔覆盖了前一个元素、数据和所有元素上的间隔。(但是传递的样式没有出错。)这是setInterval的一个奇怪的限制,还是我做错了什么?您必须使间隔句柄对每个元素都是私有的。为此,您可以使用
$。数据:
this.each(function() {
var interval = setInterval(function(){ doMyOtherFunc(options); }, 1000);
$(this).data('myplugin-interval', interval);
});
您可以通过以下方式检索间隔:
$(this).data('myplugin-interval');
这真的是你的代码吗?我看不出有什么问题(如果选择多个元素,您可能会遇到问题)。interval
变量是myplugin
函数的本地变量。不能通过另一个调用覆盖它。可能是//等中的部件有问题。
。很有趣。这两个容器有重叠吗?没有,容器根本没有重叠。@felix//etc部分中根本没有与间隔交互的内容。我还尝试将interval变量的范围更改为this.each方法内部。同样的结果。这很奇怪。这是一个问题,但不应该是OP问题的原因。出于测试目的,我尝试在this.each块中声明间隔句柄,但发生了同样的事情。会不会有一些奇怪的JS怪癖导致它总是在全局范围内?