Ich habe diesen Fehler in diesem vereinfachten Beispiel jsfiddle inszeniert.
Mein Problem, das mit diesem Fehler zusammenhängt, ist, dass ich eine finanzielle App habe, die ich baue, und ich muss eine Schaltfläche "Änderungen speichern" anzeigen, wenn Eingabedaten geändert werden. Da ich tausend Trennzeichen sofort auf keyup
einfügen muss (wenn nötig), ärgert mich dieser Fehler wirklich und bricht diese Funktionalität.
Um es zu reproduzieren gehen Sie zu jsfiddle Beispiel, öffnen Sie die Konsole in chrome Geben Sie irgendwas in der ersten Eingabe ein, keyup
event wird korrekt ausgelöst , als deaktiviere die Eingabe mit der Tabulatortaste oder klicke außerhalb davon und change
event wird nicht ausgelöst. Mach dasselbe mit anderen Eingaben und change
wird ausgelöst.
Ich habe das in Firefox getestet und es funktioniert wie erwartet.
Version von Chromium, das ich verwende, ist 14.0.835.202 (Entwickler Build 103287 Linux) Ubuntu 11.10
und
Versucht, Google Chrome 15.0.874.106 direkt von der Chrome-Website zu installieren.
Ich könnte Trennzeichen in change
event einfügen, aber da Benutzer viele Zahlen mit mehr als 7 Ziffern eingeben, wäre es viel besser, wenn UX Trennzeichen eingefügt hätte, während sie tippen.
Ich habe es in IE9 versucht und es hat das gleiche Verhalten wie Chrome.
Ich glaube nicht, dass es ein Fehler ist.
Durch die Verwendung von .val (value) für ein HTML-Element wird das Flag " manuell geändert " zurückgesetzt und somit wird kein Änderungsereignis ausgelöst (weil der Benutzer nichts manuell ändert AFTER die val () Operation).
Das sieht wie ein gültiger Chrome-Fehler aus. Meine Vermutung ist, dass das Ändern des Wertes das setzt, worauf Chrome angewiesen ist, um das onChange
-Ereignis auszulösen, seit der Benutzer sich zuletzt auf die Eingabe konzentriert hat. Ich würde vorschlagen, einen Workaround (leider) zu verwenden, der in allen Browsern funktionieren sollte.
Ich habe Ihren Code mit einem solchen Beispiel hier aktualisiert. Die Idee ist, dass Sie den ursprünglichen Wert speichern, wenn der Eingang den Fokus erhält, und dann den ursprünglichen Wert mit dem aktualisierten Wert vergleichen, wenn die Eingabe unscharf ist. Wenn es sich um einen anderen Wert handelt, führen Sie dieselbe Logik aus, die Sie in Ihren Änderungsrückruf eingegeben hätten.
Es scheint, dass dieses Verhalten erwartet wird. (Siehe Ссылка ).
Es wird erwähnt, dass Sie das Ereignis manuell auslösen müssen, wenn Sie den Wert programmgesteuert ändern.
Und gemäß Ссылка implementiert Mozilla Folgendes:
%Vor%Momentan können Sie das Blur-Ereignis erfassen und das Ereignis "change" von dort auslösen. (Sie können Ihre Vorher- und Nachher-Werte überprüfen, bevor Sie change () wie von Mozilla aufgerufen haben.)
%Vor% Das scheint mir das Verhalten zu sein. Wenn der Wert eines Elements per Skript geändert wird, wird Ihre onchange nicht ausgelöst. In solchen Fällen müssen Sie den Wert onfocus
speichern und den Wert onblur
überprüfen und onchange
manuell auslösen.
Siehe unten,
DEMO: Ссылка
%Vor%Die obige Implementierung stammt vom Pseudocode aus FF onChange
Hinweis: Das Browseränderungsereignis wird nicht ausgelöst, wenn der Wert über ein Skript geändert wird.
Tags und Links jquery google-chrome javascript-events keyup