Das Google Chrome-Änderungsereignis in der Eingabe wird nicht ausgelöst, wenn char bei keyup hinzugefügt wurde

7
%Vor%

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.

    
Ivan Ivanić 30.10.2011, 16:14
quelle

5 Antworten

8

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).

    
Edson Medina 20.09.2012, 10:22
quelle
6

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.

    
Matt Huggins 14.09.2012 18:44
quelle
4

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%     
prashanth 21.09.2012 19:39
quelle
1

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.

    
Selvakumar Arumugam 21.09.2012 15:33
quelle
0

Ich würde aus einem etwas anderen Blickwinkel herauskommen (also herumarbeiten), den Wert des Feldes jedes Mal überprüfen, wenn ein Keyup-Event ausgeführt wird. Siehe Ссылка

    
Drewid 21.09.2012 11:00
quelle