Ich stolperte über diese Frage: onKeyPress Vs. onKeyUp and onKeyDown, von wo ich fand, dass keypress
ausgelöst werden soll, wenn ein Zeichen in die Texteingabe eingegeben wird. Ich versuche den folgenden Code auszuführen. Es soll den Hintergrund der Eingabe gelb machen, sobald die Textlänge 0 überschreitet, oder Weiß, wenn es 0 ist. Ich kann es nicht funktionieren lassen. Wenn ich versuche, keydown
zu tun, habe ich folgende Probleme:jQuery: Neuen Wert in Keydown-Handler bekommen
Wenn ich nur ein Zeichen geben und loslassen, der Hintergrund weiß bleibt.
Wenn ich dann
backspace
drücke, lösche ich das ein Zeichen, es wird gelb (genau gegenüber von dem, was ich will!). Wenn ich jetzt eine andere Taste drücke (Alt
,Shift
), wird sie wieder weiß. In der Tat, wenn stattAlt
oderShift
ich ein Zeichen eintippe, wird es immer noch weiß bleiben, was uns zurück zum ersten Problem bringt.Wenn ich eine Buchstabentaste drücke und gedrückt halte, bleibt der Hintergrund für das erste Zeichen weiß und wird ab dem zweiten Zeichen gelb.
Wenn ich versuche keyup
nur, das sind die Probleme (wie erwartet):
- Der Hintergrund ändert sich nicht, solange die Tasten gedrückt gehalten werden, selbst wenn ein Zeichen hinzugefügt Die leere Eingabe oder der gesamte Text wurde gelöscht.
Wenn ich keypress
versuche, habe ich die gleichen Probleme wie keydown
, obwohl es funktionieren soll.
Wenn ich 3-Handler binden für keyup
, keydown
und keypress
(! Gott, ich bin verzweifelt), die fast alle Probleme außer gelöst Problem 3 von keydown
: Wenn ich drücken Sie eine Buchstabentaste drücken und gedrückt halten, bleibt der Hintergrund weiß für das erste Zeichen und wird gelb 2. Zeichen weiter.
Wie löse ich dieses Problem?
JS:
$(document).ready(function() {
$("input").bind("keydown", function() {
if ($(this).val().length == 0) {
$(this).css('background', 'white');
} else {
$(this).css('background', 'yellow');
}
});
$("input").bind("keypress", function() {
if ($(this).val().length == 0) {
$(this).css('background', 'white');
} else {
$(this).css('background', 'yellow');
}
});
$("input").bind("keyup", function() {
if ($(this).val().length == 0) {
$(this).css('background', 'white');
} else {
$(this).css('background', 'yellow');
}
});
});
HTML:
<input type='text' />
Nur Begleitet was ich aus Angst! Ich hasse Timer!Juicy Weg für Speicherlecks .. :( – SexyBeast
Eh richtig, es stinkt, aber es ist Ihre einzige Wahl. Sogar die jQuery-UI Autocomplete tut es so. – MightyPork
Oh sie tun? Er er, dann denke ich, es gibt wirklich keine Abhilfe! Wenn John Resig keinen Workaround finden kann, geht es mir gut .. :) Vielen Dank! – SexyBeast