2015-10-14 104 views
1

我有一個函數,用於檢查某個元素是否有屬性,如果沒有找到,函數會再次運行。它直到找到屬性或達到允許本函數允許調用的最大次數。函數重複的重置計數器

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顯示我想要完成的。

回答

2

您需要將對定時器的引用存儲在變量中,然後在select元素的更改上調用clearTimeout()。您還應該刪除var聲明,然後將cnt重置爲0,否則您將更改其範圍。試試這個:

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

Update fiddle

1

循環將繼續運行,所以你不應該需要重新調用,只需使用jQuery的變化功能:

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

編輯:剛剛意識到計時器停在10,所以更新了JSFiddle重啓計時器循環,如果它已經達到了10.

查看更新JSFiddle here:http://jsfiddle.net/91on7c1f/

0

您正在將cnt定義爲本地內部的變更句柄,您需要使用全局變量。只是刪除變更處理器內的變種