Javascript字符代码是否与所有或某些浏览器兼容?

Uui*_*uid 7 javascript jquery

我在互联网上找到了以下代码,当我看到这个解决方案时,我想知道所有浏览器的密钥代码是否相同.

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) { /* ... */ });
      }
    });
Run Code Online (Sandbox Code Playgroud)

只是一个疑问,谢谢.

ext*_*ter 6

首先,charCode不是keyCode!charCode跟随ascii集,while keyCode是键的特定索引.这里可以看到两者之间的不同值:较低ASCII字符集的键盘事件字符值 - O'Reilly Answers

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

有趣的是,onkeypress似乎返回字符代码而不是keyCode,而onkeyup和onkeydown按预期工作,因此在检测keyCode值时可能会出现一些问题.你可以在这里测试这个JavaScript - 检测击键 - 附加参考:keyCode和charCode.

keyCode,charCode并且which不推荐W3C,然而,仍然是传统的支持keyCode模式.固定的跨浏览器/平台支持是通过固定的虚拟键码来完成的,这些键盘独立于键盘布局 - 因此是"虚拟的".

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

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

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