Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多次调用jQuery插件时,SetInterval会发生冲突_Javascript_Jquery_Setinterval - Fatal编程技术网

Javascript 多次调用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() {

我正在开发一个自定义jQuery插件,它利用了SetInterval,但是当它被多次调用时就会中断

我有类似这样的东西:

(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怪癖导致它总是在全局范围内?