web-dev-qa-db-ja.com

jQuery 'keypress'は、Chromeの一部のキーでは機能しません。対処方法

ユーザーがEscを押すとdivを削除するキーを押す機能を実装しようとしています。これはFirefoxで動作します。IEでは次のコードが使用されます:

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

キーを押すと、最初のalertが表示され、エスケープを押すと、2番目のalertも表示されます。

これはChrome=では機能しません。最初のalertは、文字キーのいずれかを押すと常に表示されますが、Escape、Tab、Spaceなどを押すと表示されません数字の。

これはなぜですか?これらのキーの押下に応答するChromeを取得する方法はありますか?

62
DaveDev

代わりにkeydownを処理してみてください。

115
SLaks

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();
    }
}); 
19
bear

ESCキーの場合:

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

「L」などの文字キーの場合:

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

ChromeとFirefoxの両方で動作します

2
Dylan Foregger

2番目のアラートの後も追加します

e.preventDefault();

これにより、イベントのデフォルトアクションがトリガーされなくなります。

この方法に関する詳細情報 こちら

コードは次のようになります

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

キープレス「ESC」

e.which: 0
e.keyCode: 27

keyup 'ESC'

e.which: 27
e.keyCode: 27

印刷できない文字の場合は、keyupを使用することをお勧めします。

1

Jquery.hotkey jsファイルを使用すると、ショートカットキーを作成できます

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