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