在IE和Chrome中无法正常使用keypress事件,但在Firefox中可以。

16

有什么想法,为什么会发生这种情况?我通常认为Chrome会对代码更加宽容。

$(document).keypress(function(e) {
    if(e.keyCode == 39) rightImage();
    if(e.keyCode == 37) leftImage();
});

这就是我的键盘按键的样子。我有什么遗漏吗?rightImage(); 和 leftImage(); 是可以工作的函数,因为我在其他地方也使用了这些函数。

感谢帮助!


对我来说,你的键码39是 '(引号) - Ricardo Binns
请查看此链接:http://jsfiddle.net/LmXaW/10/。 - Ricardo Binns
@RicardoArruda 它使用的是 keydown 事件而不是 keypress。 - Foreever
3个回答

40

keypress改为keydown

$(document).keydown(function(e) {
    if(e.keyCode == 39) rightImage();
    if(e.keyCode == 37) leftImage();
});

当按下键盘上的键时,会触发keydown事件,随后紧接着会触发keypress事件。松开键时,会生成keyup事件。

为了理解keydown和keypress之间的区别,了解"字符"和"键"的区别很有用。 "键"是计算机键盘上的物理按钮,而"字符"是通过按按钮来键入的符号。理论上,keydown和keyup事件表示按下或释放键,而keypress事件表示键入字符。但是实现这一理论在所有浏览器中并不相同。


谢谢大家!是的,keydown可以用!还要感谢您的解释! - hellomello
1
@Ariane 我用wayback machine检索到的那个网页的文本替换了链接。 - jao

3

在这里找到了答案:http://api.jquery.com/keypress/

“如果你想在Chrome中使用箭头、删除和退格键,你必须使用keydown。这些键的keypress只在Firefox和Opera中有效。”

你的代码在IE8中对我不起作用(在FF中有效),所以我将keypress改为keydown。现在在IE中可以工作了。我没有Chrome来测试。


0

是的,这可以通过将onkeypress事件更改为onkeydown来实现。此外,在您想要在空格键上触发事件时,仅在Internet Explorer的情况下存在此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接