我有一个函数检查某个元素是否有属性,如果找不到,则该函数再次运行。它会在找到属性或允许此函数调用自身的最大次数之前执行。
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 来展示我想要实现的目标。
答案 0 :(得分:2)
您需要在变量中存储对计时器的引用,然后在更改clearTimeout()
元素时调用select
。在将var
重置为cnt
之前,您还应删除0
声明,否则您将更改其范围。试试这个:
$(document).on('change', '#myDropDown', function () {
clearTimeout(timer);
cnt = 0;
myFunction();
});
答案 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