我在互联网上找到了以下代码,当我看到这个解决方案时,我想知道所有浏览器的密钥代码是否相同。
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) { /* ... */ });
}
});
只是怀疑,谢谢。
答案 0 :(得分:6)
首先,charCode
不是keyCode
! charCode
跟随ascii集,而keyCode
是密钥的特定索引。两者之间的不同值可以在这里看到:Keyboard Event Character Values for the Lower ASCII Character Set - O'Reilly Answers
charCode
和keyCode
之间的一个主要区别是charCode is deprecated,并且在引用时通常在某些浏览器中没有值[除了0]
有趣的是,onkeypress似乎返回character code instead of the keyCode
,而onkeyup和onkeydown按预期工作,因此在检测keyCode
值时可能会出现一些问题。你可以在这里测试一下JavaScript - Detecting keystrokes
- 补充参考:keyCode and charCode。
keyCode
,charCode
和which
为not recommended by w3c,但仍有keyCode
模型的遗留支持。完整的跨浏览器/平台支持由fixed virtual keyCodes完成,保持独立于键盘布局 - 因此是“虚拟”。
其他虚拟密钥代码 - 在固定虚拟密钥代码之外 - 似乎也在供应商之间始终如一地实施:KeyboardEvent - Document Object Model (DOM) | MDN Virtual-Key Codes (Windows)
jQuery使用它自己的keyCode
/ charCode
事件对象属性:.which
,它会尝试统一keyCode
和charCode
。并且赞成keyCode
值 - event.which – jQuery API
简而言之,您的特定keyCode
:“13”应该适用于大多数支持javascript的浏览器,因为它是固定的虚拟键码并且与所有浏览器和平台一致
答案 1 :(得分:2)
密钥代码是标准密码,但最好也检查密钥代码10
。 10
是“换行”的关键代码,而13
是“回车”的关键代码。两者之间存在历史差异(发送两个信号所需的类型编写器,用于向上移动纸张的“换行”和用于将键入的部件移动到纸张左侧的“回车”)。
例如,快速检查显示 Ctrl + Enter 在Windows上的Chrome上发送keyCode 10
。有些'nix系统可能使用keyCode 10
,但我无法确认。谷歌搜索显示iPhone may send 10。可能还有其他情况。
有些系统使用一个,有些使用另一个来表示换行符(最后我检查过,Windows使用两者的组合),但在现代世界中,它们实际上都意味着 Enter ,所以它不会伤害到两个基地。
答案 2 :(得分:1)
当然。整个计算机都是一样的。
答案 3 :(得分:1)
keyCode 13(换行符)没有跨操作系统或跨浏览器兼容性的问题。不用担心。