2014-05-02 16 views
6

Szenario: Warnmeldung onblur (oder onchange) als Teil der JavaScript-Feldüberprüfung anzeigen.Javascript - Firefox Verhalten durch Mausklick verwischen. Fehler?

Benutzeraktion mit onblur:
1) Klicken Sie innerhalb Eingang
2) klicken Sie außerhalb des Eingangs
3) schließen Sie die Warnmeldung
4) bewegen Sie die Maus um

Ergebnis:mousedown scheint an der Position ausgeführt zu werden, an der Sie geklickt haben, bevor die Warnung aufkam - Elemente auf der Seite werden ausgewählt, wenn Sie die Maus bewegen.
Hinweis: Dies geschieht nicht, wenn Sie die Eingabe aus der Tabulatorleiste entfernen.

Demo:http://jsfiddle.net/s9sc4/

<body> 
Click inside the input and then outside of it. 
<input type="text" onblur="alert('Close this alert message and move the mouse around.');" /> 
TEST TEST TEST 
</body> 

Abgebildet auf:
den folgenden 28 und 29 Platforms: Windows 7 & 8 und OSX Mavericks (4 verschiedene Maschinen).
Die Verwendung eines sauberen Firefox-Profils machte keinen Unterschied.

FRAGE: Ist dies ein Fehler oder Standardverhalten? Chrome, Safari und IE verhalten sich nicht so.
Wenn es wie geplant ist, muss ich etwas mit preventDefault oder bubbling/stop Ausbreitung nach der Warnung zu stoppen, um dieses Verhalten zu stoppen?

Antwort

3

Sie können versuchen, hinzuzufügen:

window.getSelection().removeAllRanges(); 

Dies wird Ihr Problem lösen.

Um Ihre Frage zu beantworten: Dies scheint a bug von FireFox zu sein und benötigt eine Abhilfe. Was passiert, ist, dass FireFox die Priorität von Ereignissen durcheinander gebracht hat, wobei focus zuerst gesetzt wird, vor onblur. Browser, die den Fehler nicht haben, werden das Fokusereignis nicht auslösen, wenn onblur auftritt.

DEMO

+0

Danke - das sollte für meine Anwendungen funktionieren. Ich frage mich, warum Mozilla der Behebung grundlegender Dinge wie dieser keine höhere Priorität einräumt. –

+1

Ich sehe nicht wirklich den Link zu dem Fehler, den Sie verlinkt haben, aber ich habe dies als neuen Fehler eingereicht, der bestätigt wurde: https://bugzilla.mozilla.org/show_bug.cgi?id=1005606 Es ist zurückgestaut leider ... –

+2

Es ist ein bisschen indirekt, da der Bug von 'Fokus'-Problemen spricht. Obwohl es die Ursache für dieses spezielle Problem ist (imho). Nachdem ich ein wenig mehr gesucht habe, habe ich [ähnliche Probleme] (https://bugzilla.mozilla.org/show_bug.cgi?id=53579) gefunden, die auf das Jahr 2000 zurückgehen und alle dieselben Workarounds erfordern.Es ist eine gute Sache, dass sie es anerkennen, denke ich. –

2

Das ist interessant. Das fühlt sich an wie ein Käfer. Ich habe um ihn herum setTimeout rufen werden, und dann alert Aufruf:

<input ... onblur="setTimeout(function() { alert(...); }, 0);"> 
+0

Thank you very much. Es funktioniert. – whitesiroi