我正在尝试使用以下代码在输入框中按下space-bar
时触发js方法。
<input id="j1" />
$('#j1').keypress (function (event){
alert(event.keycode)
});
在firefox中,只有在按下enter
时才会返回正确的值,其他键的值每次只返回 0 。在IE / chrome中,这非常有效。
答案 0 :(得分:26)
在非IE浏览器中,您希望which
事件中的charCode
或keypress
属性而不是keyCode
属性。 keypress
事件用于检测键入的字符,而keyup
和keydown
用于检测物理键(在这些事件中,keyCode
适用于所有主要浏览器。)
var charCode = (typeof event.which == "number") ? event.which : event.keyCode;
但是,jQuery通过使用类似于此的代码来规范化keypress事件的which
属性,所以在jQuery中你只需要
var charCode = event.which;
关于关键事件的(很多)更多细节,请参阅http://unixpapa.com/js/key.html。
答案 1 :(得分:7)
问题不是所有浏览器在按键上都有相同的实现。解决方案是检查key
注册的所有可能位置。在这种情况下:event.keycode
和event.which
有关详细信息,请参阅此帖子
jQuery Event Keypress: Which key was pressed?
修改强>
最后挖出我的旧函数,这是我使用的实际代码:
evt = (evt) ? evt : event;
var charCode = evt.which || evt.charCode || evt.keyCode || 0;
答案 2 :(得分:2)
如果“event.keyCode”没有返回正确的值,那么对于Firefox,您可以使用“ event.charCode”
var keyValue = event.charCode || event.keyCode;
答案 3 :(得分:1)
keypress事件的价值因浏览器而异。 IE和 Google Chrome设置了KeyboardEvent.charCode值。 Gecko设置为0 按下的键是可打印的键,否则它设置相同的keyCode 作为keydown或keyup事件
所以从Firefox的角度来看,它实际上已经返回了正确的值。见the docs。
keyCode
,which
,keyIdentifier
和charCode
已弃用
此功能已从Web标准中删除。虽然有些浏览器可能仍然支持它,但它正处于存在的过程中 下降。避免使用它并尽可能更新现有代码;
keyIdentifier
在IE和Firefox中没有支持,而且已经从Opera和Chrome中删除了
使用 charCode
作为非标准
此功能不符合标准,不符合标准。不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性
那么有哪些替代方案?
key
属性readonly attribute DOMString key
保持与按下的键对应的键属性值
示例: “a”,“A”,“@”,“%”,“$”,“ا”,“ب”,“ة”,“ت”,......,“1”,“2”,“3 “,”Tab“,”输入“,所有”F1“......”
除了Internet Explorer 11以外,它已获得所有主流浏览器(Firefox 52,Chrome 55,Safari 10.1,Opera 46)的支持
AltGraph的非标准密钥标识符和不正确的行为。 More info
如果这很重要和/或向后兼容性,那么您可以使用功能检测,如下面的代码所示:
请注意,key
值与keyCode
或which
属性的不同之处在于:它包含密钥的名称而不是其代码。如果您的程序需要字符代码,那么您可以使用charCodeAt()
。
对于单个可打印字符,您可以使用charCodeAt()
,如果您正在处理其值包含多个字符的键,例如 ArrowUp
机会是:您正在测试特殊键并采取相应的措施。因此,尝试实现一个键的值及其对应的表
代码charCodeArr["ArrowUp"]=38
,charCodeArr["Enter"]=13
,charCodeArr[Escape]=27
等等,请查看Key Values及其corresponding codes
if(e.key!=undefined){
var characterCode = charCodeArr[e.key] || e.key.charCodeAt(0);
}else{
/* As @Leonid suggeted */
var characterCode = e.which || e.charCode || e.keyCode || 0;
}
/* ... code making use of characterCode variable */
code
属性:readonly attribute DOMString code
保存一个标识正在按下的物理键的字符串。该 值不受当前键盘布局或修改器的影响 state,因此特定键将始终返回相同的值。
它具有与key
属性类似的效果,以及类似于"keyW"
的输出,用于按下按钮W按下具有QUERTY的美式键盘
布局。如果在另一个布局(AZERTY)或其他语言(希伯来语)中按下相同的按钮或与修饰符组合
(shift),key
属性会相应更改,而code
属性仍具有相同的值"keyW"
更多关于此here。
Chrome 49,Firefox 52,Safari 10.1和Opera 46支持code
属性但不支持Internet Explorer。
另见:
答案 4 :(得分:0)
如果无论您按哪个键都得到0
,请尝试使用charCode
代替keyCode
发生这种情况是因为您正在调用使用which
和charCode
的KeyboardEvent对象,而不是使用keyCode
返回键盘Unicode值的Event对象。有关更多信息,请参阅MDN Web文档以获取有关KeyboardEvent的更多信息:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent