Nach meiner Erfahrung tritt das input type="text"
onchange
Ereignis normalerweise erst auf, nachdem Sie blur
die Steuerung verlassen ( ) haben.
Gibt es eine Möglichkeit, den Browser bei onchange
jeder textfield
Änderung des Inhalts zum Auslösen zu zwingen ? Wenn nicht, wie lässt sich dies am elegantesten „manuell“ verfolgen?
Die Verwendung von onkey*
Ereignissen ist nicht zuverlässig, da Sie mit der rechten Maustaste auf das Feld klicken und Einfügen auswählen können. Dadurch wird das Feld ohne Tastatureingabe geändert.
Ist setTimeout
der einzige Weg? .. Hässlich :-)
javascript
html
forms
Ilya Birman
quelle
quelle
Antworten:
Aktualisieren:
Siehe eine andere Antwort (2015).
Original 2009 Antwort:
Sie möchten also, dass das
onchange
Ereignis auf Keydown, Unschärfe und Einfügen ausgelöst wird? Das ist Magie.Wenn Sie Änderungen während der Eingabe verfolgen möchten, verwenden Sie
"onkeydown"
. Wenn Sie Einfügevorgänge mit der Maus abfangen müssen , verwenden Sie"onpaste"
( IE , FF3 ) und"oninput"
( FF, Opera, Chrome, Safari 1 ).1 Auf Safari gebrochen
<textarea>
. Verwenden SietextInput
stattdessenquelle
onkeypress
sollte anstelle von verwendet werdenonkeydown
.onkeydown
wird ausgelöst, wenn eine Taste gedrückt wird. Wenn ein Benutzer eine Taste gedrückt hält, wird das Ereignis für das erste Zeichen nur einmal ausgelöst.onkeypress
wird ausgelöst, wenn dem Textfeld ein Zeichen hinzugefügt wird.onchange
all diese Aktionen in Brand zu setzen.<input onchange="doSomething();" onkeypress="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">
wird für die meisten gut genug tun.$().on('change keydown paste input', function() {})
In diesen Tagen hören auf
oninput
. Es fühlt sich an,onchange
als müsste man nicht den Fokus auf das Element verlieren. Es ist HTML5.Es wird von allen (auch von Mobilgeräten) unterstützt, außer IE8 und niedriger. Für IE hinzufügen
onpropertychange
. Ich benutze es so:quelle
oninput
selbst in IE9 ist jedoch teilweise ( caniuse.com/#feat=input-event ).innerText
anstelle von zu verwenden,innerHTML
damit kein Markup gerendert wirdDer folgende Code funktioniert gut mit Jquery 1.8.3
HTML:
<input type="text" id="myId" />
Javascript / JQuery:
quelle
keydown
da es den Wert der Eingabe dupliziert. Entfernen Sie ihn.Javascript ist hier unvorhersehbar und lustig.
onchange
tritt nur auf, wenn Sie das Textfeld verwischenonkeyup
&onkeypress
tritt nicht immer bei Textänderungen aufonkeydown
tritt bei Textänderung auf (kann jedoch das Ausschneiden und Einfügen nicht mit einem Mausklick verfolgen)onpaste
&oncut
tritt mit Tastendruck und sogar mit der rechten Maustaste auf.Also, um die Änderung in der Textbox zu verfolgen, müssen wir
onkeydown
,oncut
undonpaste
. Wenn Sie im Rückruf dieses Ereignisses den Wert des Textfelds überprüfen, erhalten Sie den aktualisierten Wert nicht, da der Wert nach dem Rückruf geändert wird. Eine Lösung hierfür besteht darin, eine Timeout-Funktion mit einem Timeout von 50 Millisekunden (oder weniger) festzulegen, um die Änderung zu verfolgen.Dies ist ein schmutziger Hack, aber dies ist der einzige Weg, wie ich recherchiert habe.
Hier ist ein Beispiel. http://jsfiddle.net/2BfGC/12/
quelle
oninput
undtextInput
sind die Ereignisse, die die eigentliche Lösung dafür sind, aber nicht von allen Browsern unterstützt werden.onkeyup
undonkeydown
, die ähnlich sind. Beide können Strg-, Alt-, Umschalt- und Metatasten erfassen. Für den dritten Punkt nehme ich an, dass Sie gemeint habenonkeypress
.onkeyup
passiert, nachdem Sie zum Beispiel getippt haben. Ich drücke,t
wenn ich den Finger hebe, passiert die Aktion, aber beikeydown
der Aktion geschieht, bevor ich das Zeichen digitalisieret
Hoffe das ist hilfreich für jemanden.
Es
onkeyup
ist also besser, wenn Sie das senden möchten, was Sie gerade eingegeben haben.quelle
Ich hatte eine ähnliche Anforderung (Textfeld im Twitter-Stil). Gebraucht
onkeyup
undonchange
.onchange
kümmert sich tatsächlich um Maus-Einfügevorgänge bei verlorenem Fokus aus dem Feld.[Update] Verwenden Sie
oninput
in HTML5 oder höher, um Aktualisierungen von Zeichenänderungen in Echtzeit abzurufen, wie in anderen Antworten oben erläutert.quelle
oninput
ist der richtige Weg. Aber als ich es implementierte, existierte HTML5 nicht und wir hatten IE 8 :(. Ich schätze Ihr Update, da es aktuelle Informationen für BenutzerIch denke, 2018 ist es besser, die
input
Veranstaltung zu nutzen .- -
Wie die WHATWG-Spezifikation beschreibt ( https://html.spec.whatwg.org/multipage/indices.html#event-input-input ):
- -
Hier ist ein Beispiel für die Verwendung:
quelle
Wenn Sie NUR Internet Explorer verwenden, können Sie Folgendes verwenden:
Ich hoffe, das hilft.
quelle
Es gibt eine ziemlich nahe Lösung (nicht alle Einfügemöglichkeiten korrigieren), aber die meisten davon:
Es funktioniert sowohl für Eingaben als auch für Textbereiche:
Mach das so:
Wie gesagt, nicht alle Möglichkeiten zum Einfügen lösen ein Ereignis in allen Browsern aus ... schlimmstenfalls lösen einige überhaupt kein Ereignis aus, aber Timer sind schrecklich, um für solche verwendet zu werden.
Die meisten Einfügemethoden werden jedoch mit Tastatur und / oder Maus ausgeführt. Daher wird normalerweise nach dem Einfügen ein Onkeyup oder Onmouseup ausgelöst. Beim Tippen auf der Tastatur wird auch Onkeyup ausgelöst.
Stellen Sie sicher, dass Ihr Prüfcode nicht viel Zeit in Anspruch nimmt. Andernfalls erhält der Benutzer einen schlechten Eindruck.
Ja, der Trick besteht darin, auf Schlüssel und Maus zu feuern ... aber Vorsicht, beide können abgefeuert werden, denken Sie also daran !!!
quelle
Bitte beurteilen Sie den nächsten Ansatz mit JQuery:
HTML:
Javascript (JQuery):
quelle
"Eingabe" hat bei mir funktioniert.
quelle
Sie könnten die Verwendung
keydown
,keyup
undkeypress
Ereignisse als auch.quelle
Um jeden zu verfolgen, versuchen Sie dieses Beispiel und reduzieren Sie zuvor die Cursor-Blinkrate vollständig auf Null.
onblur: Ereignis wird beim Beenden generiert
onchange: Ereignis wird beim Beenden generiert, wenn Änderungen im Eingabetext vorgenommen werden
onkeydown: Ereignis wird bei jedem Tastendruck generiert (auch für langes Halten von Tasten)
onkeyup: Ereignis wird bei jeder Schlüsselfreigabe generiert
onkeypress: Wie onkeydown (oder onkeyup), reagiert jedoch nicht auf Strg, Backsace oder andere
quelle
2018 hier, das mache ich:
Wenn Sie auf Mängel in diesem Ansatz hinweisen können, wäre ich Ihnen dankbar.
quelle
Methode 1: Fügen Sie einen Ereignis-Listener hinzu für
input
:Methode 2: Definieren Sie die
oninput
Eigenschaft mit JavaScript:Methode 3: Definieren Sie die
oninput
Eigenschaft mit HTML:quelle
Robert Siemer addEventListener wird in IE8 nicht unterstützt.
"Ältere Versionen des IE unterstützten eine äquivalente, proprietäre EventTarget.attachEvent () -Methode." https://developer.mozilla.org/it/docs/Web/API/Element/addEventListener
quelle