【问题标题】:event.keycode vs event.whichevent.keycode 与 event.which
【发布时间】:2014-04-01 21:04:24
【问题描述】:

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

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

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

一旦建立起来,IE8 就抛出了一个愚蠢的问题,因为它不允许 preventDefault 要求而不是 returnValue = false 来自另一个 SO 帖子的以下 sn-p 证明非常有用:

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

在寻找解决这些问题的过程中,event.keycode 和 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;
     }
});


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

非常感谢。

【问题讨论】:

  • 你知道 jQuery 规范了浏览器之间的差异吗?在 jQuery 中,event.which 应该在浏览器中保持一致。此外,jQuery 的 event.preventDefsult(); 也可以在 OldIE 中使用。
  • @Rob W,嗨,Rob 是的,我确实知道这一点。在线 jquery 文档记录了我使用过的 event.which 的使用。此处显示的许多帖子都使用密钥代码而不是哪个。因此问题。我理解 event.preventDefsult();应该在任何地方都可以工作。
  • 想知道我们能否在 2016 年获得相关浏览器的更新?

标签: javascript jquery javascript-events event-handling


【解决方案1】:

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

【讨论】:

  • 仅适用于事件由 jquery 自身生成的情况。捕捉原生事件并对其进行规范化是不可能的
【解决方案2】:

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

event.which 在keydown 和keyup 的IE

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

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

Try it on JSFiddle

【讨论】:

  • 这对我有帮助。它应该是公认的答案。我正在使用以下行来规范化这些属性:var code = event.which || event.keyCode || event.charCode; 这会抓取不为空或不为 0 的任何字段。如果它们都为零,则返回 0。
猜你喜欢
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多