event.keycode vs event.which

忽略了Firefox的keydown行为,因为按下回车键(实际上是任何键)而不关注特定字段将不会触发keydown事件,它只会触发按键事件。

这可能非常令人困惑,因为keydownkeyup事件使用JavaScript密钥代码,而keypress使用ASCII代码。 幸运的是,13(输入/返回)对两者都很常见。

在这种情况下,使用按键的 FF有什么原因吗? 有什么好处?

一旦建立IE8就会愚蠢,因为它不允许preventDefault要求而不是returnValue = false ,来自另一个SOpost的以下片段certificate非常有用:

 event.preventDefault ? event.preventDefault() : event.returnValue = false; 

在搜索解决这些问题的过程中,我一直对event.keycodeevent.which感到困惑。 即我使用类似于以下的switch语句做错了:

 $("#class_Name").bind("keydown", function(event){ // do not test input if field controls used switch(event.which){ case 13: //enter key event.preventDefault ? event.preventDefault() : event.returnValue = false; break; } 

以下是否更好,如果是这样,为什么?

 $("body").keypress(function(event){ // stop inadvertant form submission if (event.keycode == "13"){ event.preventDefault ? event.preventDefault() : event.returnValue = false; } }); 

我想知道,以便我知道最适合哪种方式。

非常感谢。

有些浏览器使用keyCode而其他浏览器则使用。 但是使用jQuery这是规范化的,所以你不必考虑这一点。 你可以选择你喜欢的那个。

根据这个评论 jQuery可能不可靠, 这个页面说:

event.whichkeydownkeyup IE <9中未定义。

对于返回字符的键,在keypress上Gecko(Seamonkey,Firefox)中的event.keyCode为0。

event.charCode仅在Internet Explorer(Mac)的keydown和keyup上受支持。

在JSFiddle上试试吧