在Chrome浏览器中,按下ENTER键无法生成keypress事件?

17

我的应用程序需要用户在文本框中输入值,然后按下回车键(Enter或Return键),这将调用按钮的onclick事件。在IE、Firefox中可以正常工作,但在Chrome中不行。在Chrome中按enter键,并不会产生keypress事件。 这是我的代码片段:

 $('#myDiv').keypress(function (e) {
    alert("Key  pressed");
    if (e.keyCode == $.ui.keyCode.ENTER) {

     alert("enter pressed");
    }
  });

有人能提供对此的意见吗?


1
你能显示与之相关的HTML吗? #myDiv听起来像你没有直接将事件绑定到输入字段。 - JJJ
1
如果 #myDiv 是一个输入框,它在 Chrome 中可以使用,我刚在这里进行了测试 http://jsfiddle.net/PTauw/ - wakooka
我使用了keydown,它有效了。 - emilly
你需要提供一个示例来展示错误。正如Jerome的jsfiddle所示,你在问题中提供的代码在Chrome上可以正常运行。 - JJJ
最终使用了一个按钮来代替回车键,因为其他的解决方案都不太可行。Chrome需要修复这个问题。在Firefox中没有任何问题。 - Bitfinicon
4个回答

27

跨浏览器方法:

$('#myDiv').keydown( function(e) {
    var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
    if(key == 13) {
        e.preventDefault();
        alert("enter pressed");
    }
});

在 Chrome 24 上进行了测试:http://jsfiddle.net/PTauw/1/


1
@techfoobar 在这种情况下,keydown 是可以的,但与keypress一样好用。顺便说一句,没有必要使用复杂的 charCode / keyCode,因为 keyCode 在所有主流浏览器中都适用于 keydown 和 keyup。 - Tim Down
2
@TimDown - Keypress 不可靠,不能用于 ENTER(13)键(我认为实际上对于任何非打印字符都是如此)。不得不使用 keydown 来实现跨浏览器功能(从最近的几个项目中获得的经验)。 - techfoobar
@techfoobar:我非常确定keypress对于回车键是100%可靠的,而且回车键本身也是可打印的。 - Tim Down
@TimDown - 啊,是的,我是指箭头键,所以我不得不使用 keydown。我的错误。 - techfoobar
当您尝试检测选项卡时,Keypress在Chrome中无法正常工作。您必须使用keydown来检测选项卡。 - segFault

6

keypress是检测已输入字符的正确事件(虽然在这种特定情况下,即检测Enter键,keydown同样有效)。然而,在不同浏览器中如何获取在keypress事件中输入的字符是不一致的,因此jQuery使用which属性进行规范化。以下是您需要的内容:

$('#myDiv').keypress(function (e) {
    alert("Key pressed");
    if (e.which == $.ui.keyCode.ENTER) {
        alert("enter pressed");
    }
});

关于关键事件的权威参考:http://unixpapa.com/js/key.html


0

这个链接可能对你有帮助...
Api Jquery Key Press 或者尝试使用以下代码

将keypress更改为keydown:

$('#myDiv').keydown(function(e) {

   // your logic
   alert("Key  pressed");
   if (e.keyCode == $.ui.keyCode.ENTER) {
       alert("enter pressed");
   }

});

-1

Chrome似乎使用ENTER键而不是13

这对我来说在所有浏览器上都有效,包括CHROME

  $('#myDiv').keydown(function(e) {
       if ((e.which == 13) || (e.which == keyCode.ENTER)) {

    alert("enter pressed");
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接