Ich habe ein unerwartetes Verhalten von JS setTimeout
festgestellt, wenn modale Dialogfenster wie alert
geöffnet sind und ich möchte den Grund dafür wissen.Warum pausieren JS modale Nachrichtenboxen Countdown auf setTimeout()?
Ich erwartete setTimeout (Fn, 10000) zu "überprüfen Sie die aktuelle Zeit in regelmäßigen Abständen und wenn es größer ist als Now + 10000ms feuern den Event-Handler, der die übergebene" Fn "-Funktion aufrufen wird". Dies wäre logisch, da wir das Timeout-Maß als 'ms ab jetzt' übergeben. Aber anscheinend ist der Countdown auf setTimeout
ein wörtliches countdown und wird angehalten, während ein modales Fenster geöffnet ist.
setTimeout(function(){
//alert A
alert("10 seconds have passed for the first setTimeout")
}, 10000);
setTimeout(function(){
//alert B
alert("Wait for 15 seconds and press OK");
},1000);
Ich würde Alarm A erwartet sofort angezeigt werden, nachdem Sie Alarm B schließen (vorausgesetzt, Sie 15 Sekunden lang gewartet., Dies zu tun), da Alarm Ein Timeout nur für 10 Sekunden war, und sie haben bereits vergangen. Die Praxis zeigt jedoch, dass Countdown bis Alarm A einfach unterbrochen ist, während Alarm B offen ist und es erst nach ca. 9 weitere Sekunden sind vergangen, nachdem Sie Alarm B geschlossen haben, egal wie lange B geöffnet war.
Dies scheint nicht logisch.
Aktualisierung. Ich bin definitiv nicht der Einzige, der hier verwirrt ist, weil dieses Verhalten des Anhaltens der Zeitüberschreitung in Chrome und Internet Explorer auftritt, aber nicht in Firefox. Firefox führt das Verhalten aus, das ich erwartet habe - wenn Sie 15 Sekunden auf Alarm B warten, erscheint Alarm A sofort, wenn Sie es schließen.
Dies ist einer der Gründe, warum 'alert's vor allem Funktionen mit Timing nicht gut ist. – soktinpk
@soktinpk Wir verwenden Dinge wie "Bootbox" für Warnungen in unseren Projekten, aber es gibt Zeiten, in denen es nicht anwendbar ist, wie wenn Sie Benutzer über nicht gespeicherte Daten beim Schließen der Seite warnen müssen. Ich kann mir nicht vorstellen, dass Leute wegen dieses Verhaltens zu oft in Schwierigkeiten geraten, aber dennoch ist ein großer Verhaltensunterschied zwischen den drei großen Browsern interessant. –
Warnung ein Benutzer über ungesicherte Daten ist eine vollkommen gültige Verwendung für "Alarm" und/oder "bestätigen". Warum möchten Sie jedoch ein wenig warten, bevor "Alarm" -Shows angezeigt werden? – soktinpk