19

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

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

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;
     }
});


我只是想知道,以便我知道哪个最适合申请。

非常感谢。

4

2 回答 2

10

有些浏览器使用keyCode,有些使用which. 但是使用 jQuery,这是标准化的,因此您不必考虑这一点。你可以选择你喜欢的那个。

于 2012-08-29T07:20:08.893 回答
9

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

event.whichkeydown在 IE<9 on and中未定义keyup

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

event.charCode仅 Internet Explorer (Mac) 支持 keydown 和 keyup。

在 JSFiddle 上试试

于 2014-02-11T12:13:33.197 回答