【发布时间】:2013-08-09 12:00:43
【问题描述】:
我遇到了这个问题:onKeyPress Vs. onKeyUp and onKeyDown,从那里我发现keypress 应该在文本输入中输入字符时触发。我正在尝试运行以下代码。它应该在其文本长度超过 0 时使输入的背景变为黄色,或者在它为 0 时使输入的背景变为白色。我无法使其工作。如果我尝试做keydown,我会遇到以下问题:
如果我只输入一个字符然后松开,背景仍然是白色。
如果是这样,我按
backspace,从而清除那个字符,它变成黄色(与我想要的相反!)。如果我现在按任何其他键(Alt,Shift),它会再次变白。事实上,如果我输入一个字符而不是Alt或Shift,它仍然是白色的,这让我们回到第一个问题。如果我键入按一个字符键并按住它,第一个字符的背景将保持白色,然后从第二个字符开始变为黄色。
如果我只尝试keyup,这些就是问题(如预期的那样):
- 只要按住按键,背景就不会改变,即使在空输入中添加了一个字符或删除了整个文本。
如果我尝试keypress,我会遇到与keydown 相同的问题,即使它应该可以工作。
如果我为 keyup、keydown 和 keypress 绑定 3 个处理程序(上帝我绝望了!),几乎所有问题都解决了,除了 keydown 的问题 3:如果我键入按字符键并保持按下后,第一个字符的背景保持白色,从第二个字符开始变为黄色。
我该如何解决这个问题?
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' />
【问题讨论】:
标签: javascript jquery keypress keydown keyup