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

Raj*_*pta 20 javascript jquery events keycode keypress

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

  <input id="j1" /> 

  $('#j1').keypress (function (event){
       alert(event.keycode)
  });
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*own 27

在非IE浏览器中,您需要事件中的whichor charCode属性keypress而不是keyCode属性.该keypress事件是检测输入的字符,而keyupkeydown针对detcting物理按键(这些事件中,keyCode在每一个主要的浏览器的工作原理).

var charCode = (typeof event.which == "number") ? event.which : event.keyCode;
Run Code Online (Sandbox Code Playgroud)

但是,jQuery which通过使用与此类似的代码来规范化keypress事件的属性,所以在jQuery中你只需要

var charCode = event.which;
Run Code Online (Sandbox Code Playgroud)

有关关键事件的更多详细信息,请参阅http://unixpapa.com/js/key.html.


Rol*_*ruz 7

问题不是所有浏览器在按键上都有相同的实现.解决方案是检查key注册的所有可能位置.在这种情况下:event.keycodeevent.which

有关详细信息,请参阅此帖子

jQuery事件Keypress:按下了哪个键?

编辑

最后挖出我的旧函数,这是我使用的实际代码:

evt = (evt) ? evt : event;
var charCode = evt.which || evt.charCode || evt.keyCode || 0;
Run Code Online (Sandbox Code Playgroud)

  • `evt.which || evt.charCode || evt.keyCode || 0` - 减少50%的空间 (9认同)