Javascript event.keycode与event.which

Javascript event.keycode与event.which,javascript,jquery,javascript-events,event-handling,Javascript,Jquery,Javascript Events,Event Handling,我对Firefox的按键行为感到不满,因为在没有关注特定字段的情况下按enter键(实际上是任何键)不会触发按键事件,而只会触发按键事件 这可能会非常混乱,因为keydown和keyup事件使用JavaScript键代码,而keypress使用ASCII代码。幸运的是,13(enter/return)对两者都是通用的 在这种情况下FF使用按键有什么已知的原因吗?好处是什么 一旦建立起来,IE8就抛出了一个愚蠢的错误,因为它不允许默认请求,而是returnValue=false另一篇SO文章中的以

我对Firefox的按键行为感到不满,因为在没有关注特定字段的情况下按enter键(实际上是任何键)不会触发按键事件,而只会触发按键事件

这可能会非常混乱,因为keydown和keyup事件使用JavaScript键代码,而keypress使用ASCII代码。幸运的是,13(enter/return)对两者都是通用的

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

一旦建立起来,IE8就抛出了一个愚蠢的错误,因为它不允许默认请求,而是
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;
     }
});

我只是想知道,以便我知道哪一个是最好的申请


非常感谢。

一些浏览器使用
keyCode
,而另一些浏览器使用
which
。但对于jQuery,这是规范化的,所以您不必考虑这一点。您只需选择您喜欢的一个即可。

根据jQuery,它可能不可靠,并会说:


事件。IEQ中未定义的是哪个
。您知道jQuery规范化了浏览器之间的差异吗?在jQuery中,
event.which
应在不同浏览器中保持一致。另外,jQuery的
event.preventDefsult()
也将在OldIE中工作。@Rob W,你好,Rob是的,我确实知道这一点。在线jquery文档记录了我使用过的event.com的用法。许多帖子显示这里使用的是键码,而不是哪个。这就是问题所在。我理解那个事件;应该在任何地方都可以使用。想知道2016年我们是否可以在相关浏览器上获得此更新?仅适用于事件由jquery本身生成的情况。捕捉本地事件并将其正常化是不可能的这对我有帮助。这应该是公认的答案。我使用以下行来规范化这些属性:
var code=event.which | | | event.keyCode | | event.charCode
此函数将获取非null或0的字段。如果它们都为零,则返回0。