event.keycode vs event.which

event.keycode vs event.which

本文关键字:event which keycode vs      更新时间:2023-09-26

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

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

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

一旦建立了这一点,IE8就抛出了一个愚蠢的问题,因为它不允许preventDefault要求returnValue = false,而另一篇Stack Overflow帖子中的以下片段被证明非常有用:

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,而另一些则使用which。但对于jQuery,这是规范化的,所以您不必考虑这一点。你可以选择你喜欢的。

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

CCD_ 13在IE<在CCD_ 14和CCD_。

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

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

在JSFiddle 上试用