重置计数器以重复功能

时间:2015-10-14 16:02:16

标签: jquery

我有一个函数检查某个元素是否有属性,如果找不到,则该函数再次运行。它会在找到属性或允许此函数调用自身的最大次数之前执行。

var cnt = 0;

function myFunction() {
    if (!$('.myEm').is('[style]') && cnt < 10) {
            setTimeout(function () {
                myFunction();
                cnt++;
        }, 3000);
    }
}

myFunction();

但是,如果用户在另一个元素(myDropDown)中选择一个选项,则原始函数的计数器需要重置为零,myDropDown需要再次开始运行。

$(document).on('change', '#myDropDown', function() {
    var cnt = 0;
    myFunction();
});

我努力重置此计数器值。我整理了一个 FIDDLE 来展示我想要实现的目标。

3 个答案:

答案 0 :(得分:2)

您需要在变量中存储对计时器的引用,然后在更改clearTimeout()元素时调用select。在将var重置为cnt之前,您还应删除0声明,否则您将更改其范围。试试这个:

$(document).on('change', '#myDropDown', function () {
    clearTimeout(timer);
    cnt = 0;
    myFunction();
});

Update fiddle

答案 1 :(得分:1)

循环将继续运行,因此您不需要再次调用它,只需使用jQuery更改函数:

$('#myDropDown').change(function () {
    cnt = 0;
});

编辑:刚刚意识到计时器停在10,所以更新了JSFiddle,如果它已经达到10,就重新启动计时器循环。

在此处查看更新的JSFiddle:http://jsfiddle.net/91on7c1f/

答案 2 :(得分:0)

您将cnt定义为更改handleR中的local,您需要使用全局变量。只需删除var inside change handler