jQuery没有';“t检测”;“左”;输入框内按键

jQuery没有';“t检测”;“左”;输入框内按键,jquery,Jquery,我的代码是 $('input').live('keypress', function(event) { if (event.keyCode === 37) console.log("left key pressed"); else console.log("some other key press"); }); 请看 这检测按键,但不检测左按键(按键代码37)。如何检测左按键?简言之:不要使用按键事件。改为使用keydown或keydup keypress事件不包含在任何官方规范

我的代码是

$('input').live('keypress', function(event) {
   if (event.keyCode === 37) console.log("left key pressed");
    else console.log("some other key press");
});
请看


这检测按键,但不检测左按键(按键代码37)。如何检测左按键?

简言之:不要使用
按键事件。改为使用
keydown
keydup

keypress
事件不包含在任何官方规范中。因此,
keypress
没有定义良好的行为,在不同浏览器中的工作方式也不相同,而且会反复无常且不可预测。()

作为
按键
的替代方法,您应该使用以下事件之一:

  • --按下某个键时触发,按住该键时继续触发
  • --当钥匙升起时触发
我可能会使用
keydown
来修复它,因为它可能更接近您所期望的
keypress
功能:

$('input').live('keydown', function(e) { 
   if (e.which === 37) { console.log("left key pressed"); }
   else { console.log("some other key press"); }
}); 


另外,我将
e.keyCode
更改为
e.which
,因为它更兼容跨浏览器。

简言之:不要使用
keypress
事件。改为使用
keydown
keydup

keypress
事件不包含在任何官方规范中。因此,
keypress
没有定义良好的行为,在不同浏览器中的工作方式也不相同,而且会反复无常且不可预测。()

作为
按键
的替代方法,您应该使用以下事件之一:

  • --按下某个键时触发,按住该键时继续触发
  • --当钥匙升起时触发
我可能会使用
keydown
来修复它,因为它可能更接近您所期望的
keypress
功能:

$('input').live('keydown', function(e) { 
   if (e.which === 37) { console.log("left key pressed"); }
   else { console.log("some other key press"); }
}); 


另外,我将
e.keyCode
更改为
e.which
,因为它更兼容跨浏览器。

将绑定事件更改为
keyup

$('input').live('keyup', function(event) {
  if (event.keyCode === 37) console.log("left key pressed");
    else console.log("some other key press");
});

将绑定事件更改为
keyup

$('input').live('keyup', function(event) {
  if (event.keyCode === 37) console.log("left key pressed");
    else console.log("some other key press");
});

在FireFox 6.0中对我来说很好,我知道这是特定于浏览器的。我在运行Chrome13。可能会有一个bug。请将按键改为keydown。(请参见此处:)在FireFox 6.0中运行良好,我知道这是特定于浏览器的。我在运行Chrome13。可能会有一个bug。请将按键改为keydown。(看这里:)太好了。那么,为什么
keypress
没有检测到它呢?@Randomblue它只是不是一个标准化的事件,所以它的实现各不相同。有些浏览器根本不用箭头键触发
keypress
。太好了。那么,为什么
keypress
没有检测到它呢?@Randomblue它只是不是一个标准化的事件,所以它的实现各不相同。有些浏览器根本不会用箭头键触发
keypress
,这一切都取决于它是什么浏览器实现。至少在IE9中,事件不会在按键时触发。但是jQuery不是为了协调这一点吗?它可能在keypress事件sure上附加了一个处理程序(跨浏览器实现)。然而,可能是IE9甚至没有调用事件来到达处理程序。jQuery只是让附加到事件变得很容易,这一切都取决于它是什么浏览器实现。至少在IE9中,事件不会在按键时触发。但是jQuery不是为了协调这一点吗?它可能在keypress事件sure上附加了一个处理程序(跨浏览器实现)。然而,可能是IE9甚至没有调用事件来到达处理程序。jQuery只是使附加到事件变得容易。