1

jQuery ホットキーを使用して、 Alt+ HAlt+などのショートカットCをサイト内の特定のアクションにバインドしようとしています。IE 以外のすべてのブラウザで、イベントの伝播が (当然のことながら) 停止します。まず、これを達成することは可能ですか?もしそうなら、どのように?

コードサンプルは次のとおりです。

jQuery(document).bind('keydown', 'Alt+H',
     function (event)
     {
        $this.toggleMenu( 'H' );
        if(jQuery.browser.msie) {
            event.cancelBubble = true;
        }
                    else
                    {
            event.stopPropagation();
        }
        return false;
     } );

IE では、行$this.toggleMenu( 'H' );は実行されcancelbubbleますが、効果がないように見えます (ブラウザが「ヘルプ」メニューを開きます)。

4

1 に答える 1

1

これを試みるのは常に奇妙なことですが (ブラウザーの組み込みのホットキーなどが原因で)、onKeyUp イベントを使用することに成功しました。

keydown の問題は、一度に 1 つのキーしか送信できないことです。したがって、ALT を押すと、キーダウンの 1 つのトリガーになり、C が 2 番目のトリガーになります。ALT や CTRL などの修飾キーはキープレスとしてカウントされないため、一部の環境では KeyPress にも問題があります (私が思うに.. 誰かこれをもっとよく説明できますか?)。

キーアップを使用すると、キーを確認しながらALTが押し下げられているかどうかを確認できます。まだねじれを解決していますが、これを試してください(win7:ie9とchromeでのみ確認しました):

$(window).keyup(function (e)
{
    // warning: only tested with EN-US keyboard / locale

    // check whether ALT pressed (and not ALT+CTRL, ALT+SHIFT, etc)
    var key = e.key || String.fromCharCode(e.keyCode);
    if (e.altKey && !e.ctrlKey && !e.shiftKey && key)
    {
        // if ALT pressed, handle the keycode shortcut
        var keyPressed = key.toUpperCase(); // normalize input
        switch (keyPressed)
        {
            case "C":
                // do stuff for ALT-C
                break;
            case "H":
                // do stuff for ALT-H 
                break;
        }
    }
});

問題/質問:

  • jQuery を使用しますが、純粋な JS ソリューションはそれほど複雑ではありません
  • イベントをキャンセルしてデフォルトのブラウザーの動作を防ぐことは可能ですか?
  • Chrome と IE9 以外のブラウザで動作しますか? (おそらくFFとサファリ)
  • ユーザーが文字キーを離す前に Alt キーを離すと、機能しません
  • ユーザーが ALT キーを押す前に文字キーを押すと、機能しません
  • ACCESSKEY 属性を使用しようとしましたが、それはフォーカスを設定するだけです..ハイパーリンクをクリックしたり、ALT-X の組み合わせに基づいて要素の click() イベントを発生させたりしたかったのです。
  • これは、エンタープライズ Web アプリケーションでは許容できる場合がありますが (ロケールとブラウザーのサポートは通常、より狭い範囲の焦点であり、ユーザーは通常、ソフトウェアのトレーニングを受けているため)、Web サイトでは許容できない場合があります (多数のブラウザーが使用されているため、複雑さを増すローカリゼーションの懸念など)...もう少し考えなければならないでしょう。

これが誰かの役に立てば幸いです...これは、私が Web アプリを構築するときにクライアントが常に質問する機能であるため、建設的な批判を気軽に持ち込んでください。(彼らは 80 年代と 90 年代の従来のフォーム駆動型アプリに慣れており、広範なキーボード サポートを望んでいます。これは理解できます。特に、有料の場合はそうです!)

于 2013-04-11T23:02:44.960 に答える