2017-04-07 55 views
0

我有一個複選框,我只想保持檢查7秒,然後取消選中它自己。我將以下代碼放在一起,但儘管嘗試清除超時,但如果用戶在切換上單擊幾次,似乎會干擾切換。jQuery timout函數干擾切換

任何人都可以幫助我找到一個更乾淨的方式來做到這一點,如果用戶點擊太頻繁不會錯誤行爲?

$('input#foo').on('change', function(){ 
    clearTimeout(timeout); 
    if ($(this).is(':checked')) { 
     $('#box').addClass('splash').stop(); 
     $("div.title").html('Hide thing'); 
     var timeout = setTimeout(function() { 
      if ($('input#foo').is(':checked')) { 
      $('input#foo').prop('checked', false).change(); 
      } 
     }, 7000); 
    } 
    else { 
     $('#box').removeClass('splash').stop(); 
     $("div.title").html('Reveal thing'); 

    } 
    }); 
+1

超時的* scope *僅在on-change函數中。將'var timeout ='移動到'$(「input#foo」)。on(「change ...')之前,每次調用on-change函數時,超時值都會爲空,你可以用一個簡單的' console.log(timeout)'infront of cleartimeout –

回答

0

從此行刪除.change()並嘗試。 $('input#foo')。prop('checked',false);

+2

如果你不想*邀請* downvotes ...你可能想添加一點點不僅僅是複製+粘貼原始代碼... –

+0

啊,道歉,它不是'要清楚這是你改變的路線,總是添加一個解釋。 –

0

我已經設定,這樣的動作只能7秒被點擊之後,這應該解決的錯誤行爲

HTML

<input class="checkbox" type="checkbox">I will become unchecked in 7 seconds<br> 

jQuery的

$(".checkbox").click(function() { 
    setTimeout(function() { 
    $('.checkbox').prop('checked', false); 
    }, 7000); 
}); 

小提琴 -

https://jsfiddle.net/8y8zu47p/2/