Wie kann ich überprüfen den neuen Wert ein text-Feld auf Tastendruck?
Ich habe ein einzelnes Formular Feld und ich muss in der Lage sein zu erkennen, wenn sich das Feld ändert und führen Sie einige zusätzliche code mit dem neue Wert des Feldes. Ich will nur, um den code auszuführen, wenn die Taste gedrückt tatsächlich ändert sich der Wert der text box. Hier ist die Lösung, die ich kam mit.
function onkeypress(e) {
var value = this.value;
//do something with
}
function onkeyup(e) {
if ( e.which == 8 || e.keyCode == 46 ) { //delete or backspace keys
this.onkeypress(e);
}
}
Gibt es nur ein problem obwohl. onkeypress ausgelöst wird, bevor Sie das Feld ist-Wert aktualisiert wird, wenn also schnappe ich mir das Wert, ich bin immer der Vorherige Wert. Ich würde keyup verwenden ausschließlich, wenn ich wusste, dass ein Weg, um zu testen, ob die Taste verändert sich der Wert oder nicht, aber einige Zeichen (z.B. die Pfeiltasten) haben keine Auswirkung auf das Feld Wert.
Irgendwelche Ideen?
InformationsquelleAutor spudly | 2010-01-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Weg ich tun, dies ist einfach mit einer variable entlang der Linien von
prevValue
. Am Ende des Schlüssels drücken Sie Funktion, speichern Sie den Wert in die variable, und nur führen Sie die Funktion wieder, wenn der Wert nicht gleich, dass der Vorherige Wert.InformationsquelleAutor Nate B
dies ist einfach, benutzen Sie einfach onkeyup statt onkeypress
onkeyup
arbeiten würde, stattonkeypress
.InformationsquelleAutor john
haben andere bedingt:
Diese fangen würde low-level ascii-symbol eingegeben, indem die Tastatur außerhalb des speziellen char-Auswahl.
EDIT: (32 Raum)
Tatsächlich, ich erkannte, dass dies nicht funktioniert, weil die Schlüssel-codes müssen nicht unbedingt übereinstimmen mit den ascii-codes. Siehe developer.mozilla.org/en/DOM/Event/UIEvent/KeyEvent
Eh, es funktioniert immer noch, Sie müssen nur passen die zahlen. Lassen Sie mich versuchen, eine Bearbeitung des bedingten.
-
_
|
diese Zeichen sind false positivesInformationsquelleAutor Joel Etherton
Hier ist meine Letzte Lösung, die verwendet eine prevValue Variablen, aber nicht verunreinigen, den globalen namespace ("Fenster") oder die dom-element-Eigenschaften.
Hinweis oben, dass die onkeyup Funktion dient als Verschluss um das prevValue variable. Dies verhindert, dass die namespace-Verschmutzung, damit ich nicht haben, erstellen Sie eine Globale variable oder das Anhängen einer Eigenschaft an das input-element selbst. Diese ist so elegant wie ich es bekommen kann. Ich tatsächlich schrieb mir in jQuery dachte aber, die Antwort sollte von selbst eine Reine JavaScript...
InformationsquelleAutor spudly
Es ist sozusagen ein hack, aber Sie können den vorherigen Wert in einer Eigenschaft der textbox ("expando-Attribute")
InformationsquelleAutor Philippe Leybaert
Könnten Sie speichern Sie den alten Wert und erkennen, ob es geändert:
InformationsquelleAutor gnarf