2

構築したサイトに次のjQueryコードがあります。

$(document).ready(function() {
  // Other Bindings/Initializations Removed

  // Hotkey Event Handler to 'doSomething'
  //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  $(document).keypress("a",function(e) {
    if(e.altKey) { // Doesn't work
      doSomething();
    }
  });

  // Hotkey Event Handler to 'doSomething'
  //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  $(document).keypress("a",function(e) {
    if(e.shiftKey) { //Works as Expected?
      doSomething();
    }
  });

});

コードは、キーと押下の組み合わせイベント(この場合は「Alt-A」)をキャッチし、適切なアクションを実行する関数の呼び出しに進みます。この機能をFireFoxでテストしたところ、期待どおりに関数が呼び出されました。Chromeで機能をテストしたところ、関数は呼び出されず、代わりに不快なエラートーンが鳴りました。「Alt-A」が重要なブラウザのホットキーの組み合わせと衝突したのではないかと思ったので、「A」を「N」、「G」、「K」に変更しました。関数が呼び出されず、エラートーンが発せられるたび。ただし、Shift-A / N / G / Kホットキーの組み合わせを作成したとき、Chromeは期待どおりに関数を呼び出しました。

  1. Chromeが「Alt」キーを異なる方法で処理するのはなぜですか?

  2. 「Alt」キーを使用してChromeで機能するように、サイトのホットキーを定義するにはどうすればよいですか?

4

2 に答える 2

2

これはChromeとFirefoxで機能しますが、IEではAlt+aでお気に入りメニューが開きます。それをどのようにオーバーライドするかわかりません。

フィドル

HTML:

<a accesskey="a">​

Javascript:

$(document).ready(function() {
    // Other Bindings/Initializations Removed
    // Hotkey Event Handler to 'doSomething'
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    $(document).keypress("a", function(e) {

        if (e.shiftKey) { //Works as Expected?
            alert("shift a");
        }

        if (e.altKey) {
            alt_a_function();
        }

    });

    $(document).on("click", "[accesskey=a]", function() {
        alt_a_function();
    });

});

function alt_a_function() {
    alert("alt a");
}​
于 2012-12-01T02:08:31.977 に答える
0

jQueryのドキュメントによると、.keypress()の最初の引数は、「イベントハンドラーに渡されるデータのマップ」です。そのオブジェクトが文字列である場合、おそらくjQueryが混乱し、Chromeでエラーが発生します。

イベントハンドラで特定のキーを確認するには、e.which代わりにを使用して文字コードを取得します。

于 2012-12-01T01:43:07.420 に答える