在ENTER键上的Chrome中未生成按键事件?

emi*_*lly 16 html javascript jquery google-chrome

我的应用程序需要用户输入,在文本框中输入值时,用户按Enter(返回键)并调用按钮onclick事件.这适用于IE,FF但不是Chrome.在输入chrome时,不生成keypress事件这是我的代码片段

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

     alert("enter pressed");
    }
  });
Run Code Online (Sandbox Code Playgroud)

有人可以提供这方面的意见吗?

sde*_*ont 25

跨浏览器方法:

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

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

  • 拜托,你可以争辩投票吗?适合我多年. (2认同)
  • 究竟.Keydown**是最佳选择.为什么选择downvote? (2认同)
  • @TimDown - Keypress用于ENTER(13)键是不可靠的(我认为实际上对于任何非打印字符).不得不求助于使用keydown进行跨浏览器功能(来自最近几个项目的经验) (2认同)

Tim*_*own 6

keypress是检测哪个字符已被输入的正确事件(尽管在这种特殊情况下,检测输入键的keydown情况也同样有效).但是,如何获取在按键事件中键入的字符在浏览器之间是不一致的,因此jQuery会对该which属性进行规范化.这是你想要的:

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

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