2014-03-30 8 views
10

Wenn wir alert() verwenden, bricht der Code manchmal.Warum bricht alert() die Codeausführung ab?

Zum Beispiel:

HTML:

<span>Hi</span> 

Javascript:

$(document).ready(function() { 

    $("span").dblclick(function() { 
     alert("b"); 
    }); 
    $("span").click(function() { 
     alert("a"); 
    }); 

}); 

Die alert("b") nicht einmal auftauchen.

Aber wenn wir diezu console.log ändern, wird es protokolliert.

Alert Demo & console.log Demo

Also, was ist los?

+1

Ich weiß nicht, warum das sogar downvoted wurde. Es ist eine gute Frage –

+0

Ich bin froh, diese Frage zu finden. Das war mir gar nicht bewusst. Ich dachte, ich hätte einen Fehler in meinem Code, da er nicht richtig ausgeführt wurde. nach dem Herausnehmen der Warnung funktionierte es gut: D – Sarah

Antwort

8

alert öffnet einen Modelldialog. Wenn es geöffnet ist, können Sie mit keinem Teil der Seite interagieren, außer der Warnung selbst.

Da Sie nicht mit der Seite interagieren können, kann die zweite Hälfte des Doppelklicks nicht die Spanne erreichen, sodass das Doppelklickereignis nicht ausgelöst wird.

+0

Eine ähnliche Frage: http://stackoverflow.com/questions/10173843/alert-method-not-resulting-in-window-focus-on-modern-browsers Alert Gewinne konzentrieren, Der zweite Klick erfolgt also nicht auf der Seite. –

1

Weil Sie den ersten Klick abfangen und eine Warnung anzeigen. Der zweite Klick wird nicht abgefangen, da der Alert jetzt den Fokus hat.

Wenn Sie sich an der Konsole anmelden, werden beide Klicks abgefangen, und Sie werden feststellen, dass "a" zweimal protokolliert wird.

1

Es gibt ein paar Funktionen, die den Code beim Aufruf stoppen. Dies nennt man synchrone Funktionen, die eine Pause im Code verursachen, bis Sie auf OK klicken. alert() ist synchron und so ist prompt(). Dies bewirkt, dass das click-Ereignis stattfindet und den Code aussetzt, so dass kein Doppelklick-Ereignis mehr stattfindet ...

3

Mit alert() wird die gesamte Codeausführung gestoppt. Es wäre unmöglich, einen Doppelklick zu erfassen, wenn Sie bereits den einzigen Klick erfassen, um die Codeausführung anzuhalten.

Um zu demonstrieren, habe ich die alert für den einzigen Klick in Ihrer Geige auskommentiert. Sie können sehen, HERE, dass die Warnung jetzt auf den Doppelklick passiert.

Verwandte Themen