event.keycode vs event.which

时间:2012-08-29 07:15:20

标签: javascript jquery javascript-events event-handling

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

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

在这种情况下,使用 keypress 的FF是否有任何已知原因?有什么好处?

一旦确定,IE8就会愚蠢,因为它不允许 preventDefault 要求returnValue = false来自另一个SO帖子的以下片段证明非常有用:

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

在搜索解决这些问题的过程中,我一直对event.keycode vs event.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;
     }
});


我想知道,以便我知道哪种方法最适用。

非常感谢。

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:7)

根据this comment jQuery可能不可靠,this page说:

event.whichkeydown的IE< 9中未定义

keyup

对于返回字符的键,event.keyCode上的Gecko(Seamonkey,Firefox)中的

keypress为0。

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

Try it on JSFiddle