event.keycode没有在firefox中返回正确的值
我正在尝试以下代码,以便在输入框中按下space-bar
键时触发js方法。
$('#j1').keypress (function (event){ alert(event.keycode) });
在firefox中,只有在按下enter
时返回正确的值,其他键返回的值每次只有0 。 在IE / chrome中,这非常有效。
在非IE浏览器中,您需要keypress
事件中的which
或charCode
属性而不是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 。
问题不是所有浏览器在按键上都有相同的实现。 解决方案是检查key
注册的所有可能位置。 在这种情况下: event.keycode
和event.which
有关详细信息,请参阅此post
jQuery事件Keypress:按下了哪个键?
编辑
最后挖出我的旧函数,这是我使用的实际代码:
evt = (evt) ? evt : event; var charCode = evt.which || evt.charCode || evt.keyCode || 0;
如果“event.keyCode”没有返回正确的值,那么对于firefox你可以使用“ event.charCode”
var keyValue = event.charCode || event.keyCode;
KeyboardEvent.keyCode:
keypress事件的值在浏览器之间是不同的。 IE和Google Chrome设置了KeyboardEvent.charCode值。 如果按下的键是可打印键,则Gecko设置为0,否则它设置与keydown或keyup事件相同的keyCode
所以从Firefox的角度来看,它实际上已经返回了正确的值。 查看文档 。
keyCode
,不推荐使用keyIdentifier
和charCode
此function已从Web标准中删除。 虽然有些浏览器可能仍然支持它,但它正在被删除。 如果可能,请避免使用它并更新现有代码;
keyIdentifier
在IE和Firefox中没有支持,而且已从Opera和Chrome中删除
使用 charCode
作为非标准
此function是非标准的,不在标准轨道上。 不要在面向Web的生产站点上使用它:它不适用于每个用户。 实现之间可能存在很大的不兼容性
那有什么选择呢?
I.改用key
属性
readonly attribute DOMString key
保持与按下的键对应的键属性值
例如:“a”,“A”,“@”,“%”,“$”,“ا”,“ب”,“É”,“Ê”,……,“1”,“2”, “3”,“Tab”,“Enter”,所有“F1”……`
它获得了所有主流浏览器(Firefox 52,Chrome 55,Safari 10.1,Opera 46)的支持,但Internet Explorer 11除外,它具有非标准密钥标识符和AltGraph的错误行为。 更多信息
如果这很重要和/或向后兼容性,那么您可以使用function检测,如下面的代码所示:
请注意, key
与keyCode
或which
属性不同:它包含键的名称而不是其代码。 如果您的程序需要字符代码,那么您可以使用charCodeAt()
。 对于单个可打印字符,您可以使用charCodeAt()
,如果您正在处理其值包含多个字符的键,例如ArrowUp,则可能是:您正在测试特殊键并采取相应的操作。 因此,尝试实现一个键的值及其相应的代码表charCodeArr["ArrowUp"]=38
, charCodeArr["Enter"]=13
, charCodeArr[Escape]=27
……依此类推,请看看Key值及其相应的代码
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 */
II。您还可以使用code
属性:
readonly attribute DOMString code
保存一个标识正在按下的物理键的字符串。 该值不受当前键盘布局或修改器状态的影响,因此特定键将始终返回相同的值。
它具有与key
属性类似的效果,以及具有QUERTY布局的美式键盘按下按钮W的"keyW"
输出。 如果在另一个布局(AZERTY)或其他语言(希伯来语)中按下相同的按钮或与修饰符(shift)组合,则key
属性会相应更改,而code
属性在此处仍具有相同的值"keyW"
。
Chrome 49,Firefox 52,Safari 10.1和Opera 46支持code
属性,但不支持Internet Explorer。
也可以看看 :
- KeyboardEvent.charCode
- KeyboardEvent.keyIdentifier
- KeyboardEvent.keyCode
- KeyboardEvent.which
- KeyboardEvent.key
- 关键财产支持
- KeyboardEvent.code
- 代码属性支持