7

我在互联网上找到了以下代码,当我看到这个解决方案时,我想知道这个关键代码是否对所有浏览器都相同。

var CalendarFilter = Backbone.View.extend({
      // ...
      events: {
        'click .filter':  'filter',
        'keypress input[type=text]': 'filterOnEnter'
      },
      filterOnEnter: function(e) {
        if (e.keyCode != 13) return;
        this.filter(e);
      },
      filter: function(e) { /* ... */ });
      }
    });

只是一个疑问,谢谢。

4

4 回答 4

6

首先,charCode不是keyCodecharCode遵循 ascii 集,whilekeyCode是键的特定索引。两者之间的不同值可以在这里看到:键盘事件字符值较低的 ASCII 字符集 - O'Reilly Answers

charCode和之间的一个主要区别keyCodecharCode 已被弃用,并且在引用时通常在某些浏览器中没有任何价值 [除了 0]

有趣的是,onkeypress 似乎返回字符代码而不是keyCode,而 onkeyup 和 onkeydown 按预期工作,因此在检测keyCode值时可能会出现一些问题。你可以在这里测试一下JavaScript - Detecting keystrokes - Additional reference: keyCode 和 charCode

keyCodecharCode并且which被 w3c 推荐,但是,仍然有对该keyCode模型的传统支持。可靠的跨浏览器/平台支持是通过固定的虚拟键码完成的,这些键码保持独立于键盘布局 - 因此是“虚拟的”。

其他虚拟键码 - 固定虚拟键码之外 - 似乎也在供应商之间得到一致实施:KeyboardEvent - 文档对象模型 (DOM) | MDN 虚拟键代码 (Windows)

jQuery 使用它自己的keyCode/charCode事件对象属性:.which,它试图统一keyCodecharCode。并且偏爱keyCode值 - event.which – jQuery API

简而言之,您的特定keyCode:“13”应该适用于大多数支持 javascript 的浏览器,因为它是一个固定的虚拟键码,并且与所有浏览器和平台一致

于 2012-12-25T03:42:11.387 回答
2

键码是标准的,但最好也检查一下键码1010是“换行”13的键码,而是“回车”的键码。两者之间存在历史差异(打字机需要发送两个信号,“换行”将纸张向上移动,“回车”将打字的部分移动到纸张的左侧)。

例如,快速检查显示Ctrl+在 Windows 上的 Chrome 上Enter发送 keyCode 。10一些'nix系统可能使用 keyCode 10,但我无法确认。谷歌搜索显示iPhone 可能会发送 10 个。可能还有其他情况。

一些系统使用一个来表示换行符(最后我检查过,Windows 使用了两者的组合),但在现代世界中,它们实际上都表示Enter,因此涵盖这两个基础不会有什么坏处。

于 2012-12-25T02:16:27.950 回答
1

当然。在整个计算机上都是一样的。

于 2012-12-25T02:09:13.327 回答
1

keyCode 13(换行符)在跨操作系统或跨浏览器兼容性方面没有问题。不用担心。

于 2012-12-25T02:12:39.353 回答