Ich habe:
$(someTextInputField).keypress(function() {
alert($(this).val());
});
Jetzt gibt die Warnung immer den Wert VOR dem Tastendruck zurück (z. B. wenn das Feld leer ist, gebe ich 'a' ein und die Warnung gibt mir ''. Dann gebe ich 'b' ein und die Warnung gibt mir 'a' ...). Aber ich möchte den Wert NACH dem Tastendruck - wie kann ich das tun?
Hintergrund: Ich möchte eine Schaltfläche aktivieren, sobald das Textfeld mindestens ein Zeichen enthält. Ich führe diesen Test bei jedem Tastendruckereignis aus, aber mit dem zurückgegebenen val () ist das Ergebnis immer einen Schritt zurück. Die Verwendung des change () -Ereignisses ist für mich keine Option, da die Schaltfläche dann deaktiviert wird, bis Sie das Textfeld verlassen. Wenn es einen besseren Weg gibt, bin ich froh, das zu hören!
javascript
jquery
events
forms
javascript-events
Jörg Brenninkmeyer
quelle
quelle
Antworten:
Wechseln
keypress
zukeyup
:keypress
wird ausgelöst, wenn die Taste gedrückt wird,keyup
wird ausgelöst, wenn die Taste losgelassen wird.quelle
Überrascht, dass niemand das js "Eingabe" -Ereignis erwähnte:
Empfohlen.
https://developer.mozilla.org/en-US/docs/Web/Events/input
quelle
Verwenden Sie anstelle des Tastendrucks die Taste .
quelle
Alternativ können Sie das Keydown-Ereignis mit einem Timeout von 0 verwenden.
Auf diese Weise werden die Änderungen sofort übernommen, anstatt angewendet zu werden, wenn der Benutzer die Taste nicht mehr gedrückt hält.
quelle
Möglicherweise möchten Sie einen
onchange
Ereignishandler anschließen, anstatt eines der Schlüsselereignisse zu verwenden.Wenn Sie
Edit > Paste
oder einen Rechtsklick und dann Einfügen verwenden, wird ein Änderungsereignis ausgelöst, jedoch kein Schlüsselereignis. Beachten Sie, dass einige Browser möglicherweise ein Schlüsselereignis beim Einfügen simulieren (obwohl ich keines kenne), aber Sie können sich nicht auf dieses Verhalten verlassen.quelle
Versuchen Sie so etwas:
Dies führt lediglich zu einer Zeitüberschreitung, sodass Ihr Code nach Abschluss der Ereignisschleife "Tastendruck" fast unmittelbar danach ausgeführt wird. Ein so kurzes Timer-Intervall (auch wenn es vom Browser aufgerundet wird) wird nicht bemerkt.
bearbeiten - oder Sie könnten "keyup" verwenden, wie alle anderen sagen, obwohl die Semantik unterschiedlich ist.
quelle