jQuery'keypress'不适用于Chrome中的某些键。如何解决?

时间:2010-10-10 16:14:46

标签: jquery google-chrome keypress

我正在尝试实现按键功能,当用户点击Esc时会删除div。这适用于Firefox& IE使用以下代码:

$("body").keypress(function(e) {
    alert("any key pressed");
    if (e.keyCode == 27) {
        alert("escape pressed");
    }
});

如果我按任意键,则显示第一个alert,如果我点击Escape,则还会显示第二个alert

但这不适用于Chrome。如果我点击任何字母键,则会始终显示第一个alert,但是当我点击Escape,Tab,Space或任何数字时,则不会显示。{/ p>

为什么会这样?有没有办法让Chrome响应这些按键?

6 个答案:

答案 0 :(得分:115)

请尝试处理keydown

答案 1 :(得分:19)

使用 keydown 。 keypress不适用于Chrome中的ESC(不确定其他浏览器)。

$(newTag).keydown(function(e) {  //keypress did not work with ESC;
    if (event.which == '13') {
      ProfilePage.saveNewTag(search_id, $(newTag).val());
    }
    else if (window.event.which){
      $(newTag).remove();
    }
}); 

答案 2 :(得分:2)

对于ESC键:

$(document).keydown(function(e) {
  if(e.keyCode == 27) { /* Run code */ }
}

对于字母键,例如'L':

$(document).keypress(function(e) {
  if(e.which == 108) { }
});

适用于Chrome和Firefox

答案 3 :(得分:1)

第二次警报后也添加

e.preventDefault();

这将阻止触发事件的默认操作。

有关此方法的更多信息here

您的代码应该是

$("body").keypress(function(e) {
    alert("any key pressed");
    if (e.keyCode == 27) {
         alert("escape pressed");
         e.preventDefault();
}});

答案 4 :(得分:1)

按键'ESC'

e.which: 0
e.keyCode: 27

keyup'ESC'

e.which: 27
e.keyCode: 27

对于不可打印的字符,最好使用keyup

答案 5 :(得分:0)

使用Jquery.hotkey js文件,您可以生成Sortcut键

$(document).bind('keydown', 'esc', function(){ });