event.keycode没有在firefox中返回正确的值

我正在尝试以下代码,以便在输入框中按下space-bar键时触发js方法。

   $('#j1').keypress (function (event){ alert(event.keycode) }); 

在firefox中,只有在按下enter时返回正确的值,其他键返回的值每次只有0 。 在IE / chrome中,这非常有效。

在非IE浏览器中,您需要keypress事件中的whichcharCode属性而不是keyCode属性。 keypress事件用于检测键入的字符,而keyupkeydown用于检测物理键(在这些事件中, 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.keycodeevent.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 ,不推荐使用keyIdentifiercharCode

此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检测,如下面的代码所示:

请注意, keykeyCodewhich属性不同:它包含键的名称而不是其代码。 如果您的程序需要字符代码,那么您可以使用charCodeAt() 对于单个可打印字符,您可以使用charCodeAt() ,如果您正在处理其值包含多个字符的键,例如ArrowUp,则可能是:您正在测试特殊键并采取相应的操作。 因此,尝试实现一个键的值及其相应的代码表charCodeArr["ArrowUp"]=38charCodeArr["Enter"]=13charCodeArr[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。

也可以看看 :

  1. KeyboardEvent.charCode
  2. KeyboardEvent.keyIdentifier
  3. KeyboardEvent.keyCode
  4. KeyboardEvent.which
  5. KeyboardEvent.key
  6. 关键财产支持
  7. KeyboardEvent.code
  8. 代码属性支持