私はこの質問に出くわしました: onKeyPress Vs. onKeyUp および onKeyDown、keypress
文字がテキスト入力に入力されるたびに起動するはずの場所から。この次のコードを実行しようとしています。テキストの長さが 0 を超えた瞬間に入力の背景を黄色に、0 になった瞬間に背景を白くするはずですが、うまくいきません。しようとするとkeydown
、次の問題があります。
1 文字だけ入力して放すと、背景は白のままです。
次に、 を押す
backspace
と、その 1 文字がクリアされ、黄色に変わります (私が望むものとは正反対です!)。ここで他のキーを押すと(Alt
、Shift
)、再び白くなります。実際、代わりに、Alt
またはShift
私が文字を入力すると、それはまだ白いままで、最初の問題に戻ります.文字キーを押して押し続けると、最初の文字の背景は白のままで、2 文字目以降は黄色になります。
私が試しkeyup
た場合、これらは問題です(予想どおり):
- 空の入力に文字が追加されたり、テキスト全体が削除されたりしても、キーを押し続けている限り背景は変わりません。
を試してみると、動作するはずなのに とkeypress
同じ問題に直面します。keydown
と の 3 つのハンドラーをバインドすると(神よkeyup
、私は絶望的です!)、ほとんどすべての問題が解決されますが、問題 3 を除きます。 2キャラ目以降。keydown
keypress
keydown
この問題を解決するにはどうすればよいですか?
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' />