Wenn Sie jquery .change
für ein verwenden, wird input
das Ereignis nur ausgelöst, wenn die Eingabe den Fokus verliert
In meinem Fall muss ich den Dienst anrufen (prüfen, ob der Wert gültig ist), sobald der Eingabewert geändert wird. Wie könnte ich das erreichen?
javascript
jquery
html
Banshee
quelle
quelle
Antworten:
AKTUALISIERT zur Verdeutlichung und zum Beispiel
Beispiele: http://jsfiddle.net/pxfunc/5kpeJ/
Methode 1.
input
EreignisIn modernen Browsern verwenden Sie das
input
Ereignis. Dieses Ereignis wird ausgelöst, wenn der Benutzer in ein Textfeld tippt, einfügt oder rückgängig macht, im Grunde immer dann, wenn sich der Wert von einem Wert zum anderen ändert.In jQuery machen Sie das so
ab jQuery 1.7 ersetzen
bind
durchon
:Methode 2.
keyup
EreignisFür ältere Browser wird das
keyup
Ereignis verwendet (dies wird ausgelöst, sobald eine Taste auf der Tastatur losgelassen wurde. Dieses Ereignis kann eine Art falsches Positiv ergeben, da bei der Freigabe von "w" der Eingabewert geändert wird und daskeyup
Ereignis ausgelöst wird, aber auch, wenn das Die Umschalttaste wird losgelassen,keyup
wenn das Ereignis ausgelöst wird, aber keine Änderung an der Eingabe vorgenommen wurde.). Diese Methode wird auch nicht ausgelöst, wenn der Benutzer mit der rechten Maustaste auf das Kontextmenü klickt und es einfügt:Methode 3. Timer (
setInterval
odersetTimeout
)Um die Einschränkungen zu
keyup
umgehen, können Sie einen Timer einstellen, der den Wert der Eingabe regelmäßig überprüft, um eine Wertänderung festzustellen. Sie können diese Timerprüfung verwendensetInterval
oder durchführensetTimeout
. Sehen Sie sich die markierte Antwort auf diese SO-Frage an: Ereignis zum Ändern des jQuery-Textfelds oder sehen Sie sich die Geige an, um ein Arbeitsbeispiel mitfocus
undblur
events zum Starten und Stoppen des Timers für ein bestimmtes Eingabefeld zu verwendenquelle
innerText
odervalue
(Simulation der Benutzereingabe) löst ein MutationObserver-Ereignis aus. Jsfiddle.net/pxfunc/ 04chgpws / 1 (Informationen zur MutationObserver-Ereignisprotokollierung finden Sie im console.log). Haben Sie einen anderen Testfall, den ich mir ansehen kann?Wenn Sie HTML5 haben:
oninput
(wird nur ausgelöst, wenn tatsächlich eine Änderung erfolgt, dies jedoch sofort)Andernfalls müssen Sie nach all diesen Ereignissen suchen, die möglicherweise auf eine Änderung des Werts des Eingabeelements hinweisen:
onchange
onkeyup
( nichtkeydown
oderkeypress
da der Wert der Eingabe noch keinen neuen Tastenanschlag enthält)onpaste
(wenn unterstützt)und vielleicht:
onmouseup
(Da bin ich mir nicht sicher)quelle
Mit HTML5 und ohne Verwendung von jQuery können Sie das
input
Ereignis verwenden :Dies wird jedes Mal ausgelöst, wenn sich der Text der Eingabe ändert.
Unterstützt in IE9 + und anderen Browsern.
Probieren Sie es hier live in einer jsFiddle aus .
quelle
Wie andere bereits vorgeschlagen haben, besteht die Lösung in Ihrem Fall darin, mehrere Ereignisse zu erfassen .
Plugins, die diesen Job ausführen, warten häufig auf die folgenden Ereignisse:
Wenn Sie denken , es kann passen, können Sie hinzufügen
focus
,blur
und andere zu Veranstaltungen.Ich schlage vor, die zu hörenden Ereignisse nicht zu überschreiten, da im Browser-Speicher weitere Prozeduren geladen werden, die entsprechend dem Verhalten des Benutzers ausgeführt werden sollen.
Achtung: Beachten Sie, dass das Ändern des Werts eines Eingabeelements mit JavaScript (z. B. über die jQuery-
.val()
Methode) keines der oben genannten Ereignisse auslöst.(Referenz: https://api.jquery.com/change/ ).
quelle
.val()
beispielsweise für ein Änderungsereignis in einem Eingabefeld$('#element').val(whatever).change()
Wenn Sie möchten, dass das Ereignis ausgelöst wird, wenn sich innerhalb des Elements etwas ändert, können Sie das Keyup- Ereignis verwenden.
quelle
onchange
den Status entweder verwenden oder selbst verfolgen.keydown
funktioniert nicht, weil es ausgelöst wird, bevor der Status der Eingabe geändert wird.// .blur wird ausgelöst, wenn das Element den Fokus verliert
// Um manuell auszulösen, verwenden Sie:
quelle
Es gibt jQuery-Ereignisse wie Keyup und Keypress, die Sie mit eingegebenen HTML-Elementen verwenden können. Sie können zusätzlich das Ereignis blur () verwenden .
quelle
keypress
Ereignisses nicht zuverlässig überprüfen, da die gedrückte Taste diesen Wert noch nicht geändert hat.Dies umfasst jede Änderung an einer Eingabe mit jQuery 1.7 und höher:
quelle