2017-04-07 4 views
0

Ich habe ein Kontrollkästchen, das ich nur für 7 Sekunden überprüft bleiben und dann selbst deaktivieren möchten. Ich habe den folgenden Code zusammengestellt, aber trotz des Versuches, das Timeout zu löschen, scheint es das Umschalten zu stören, wenn der Benutzer mehrmals auf den Schalter klickt.jQuery Timout-Funktion stört das Umschalten

Kann mir jemand helfen, einen saubereren Weg zu finden, der sich nicht benimmt, wenn die Benutzer zu häufig klicken?

$('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

Das * scope * für das Timeout befindet sich nur innerhalb der Änderungsfunktion. Move 'var timeout =' nach vor '$ (" input # foo ") on (" change ... '. Jedes Mal, wenn die Change-Funktion aufgerufen wird, ist Timeout gleich Null. Sie können dies mit einem einfachen' bestätigen console.log (timeout) 'infront von cleartimeout –

Antwort

0

Entfernen Sie .change() von dieser Zeile und versuchen Sie es. $ ('input # foo'). Prop ('checked', false);

+2

Sie möchten vielleicht ein wenig mehr als nur kopieren und fügen Sie den ursprünglichen Code, wenn Sie nicht einladen wollen * downvotes ... –

+0

Ah, Entschuldigung, es war nicht ' t klar, dass das die Zeile war, die du geändert hast, füge immer eine Erklärung hinzu. –

0

Ich habe es so eingestellt, dass nur die Aktion funktioniert 7 Sekunden, nachdem er angeklickt wird, ist dies die Fehl verhalten

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); 
}); 

Fiddle lösen sollte -

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