2011-10-17 8 views
11

自分のサイトの機能のスラッシュ(/)にキープレス値 '191'をキャプチャします。クイック検索機能のため、Firefoxを除くすべてのブラウザで正常に動作します。 '191'はまだ登録されており、アクションは実行されます(入力フィールド、ポップアップヘルプテキストに焦点を当てます)。しかし、フォーカスはクイック検索に行きます。クイック検索Firefoxの機能をバイパスしてスラッシュキーをキャプチャする方法

別のStackOverflowの質問によると、Firefoxはスラッシュを文字コード '0'として取得していますが、何もしませんでした。

Firefoxのクイック検索を無視してフォワードスラッシュを制御できる方法はありますか? JavaScriptとjQueryの使用

+2

まず、**これを行う必要があるかどうかを確認します。一般的な規則として、私はユーザの知識と同意なしにブラウザの予想される動作を変更するものを行う前に、2回(またはそれ以上)考えています。そうすることは、主にそれらのユーザーを苛立たさせ、疎外させるために役立ちます。 (もちろん、私はあなたのアプリケーションについて何も知らずにこれを言うでしょう;多分あなたはこの振る舞いを望んでいる理由があります。) – eaj

+0

あなたの最善の策は別のショートカットキーを選ぶことです。今日この問題を解決したとしても、Firefoxの新しいアップデートがただちに再びそれを打ち砕くわけではないということは何もありません。紛争を完全に回避するのに最適です。 –

+0

これは実際に必要かもしれない別のケースです:ユーザーが "入力を開始するとテキストを検索する"オプションを有効にすると、検索バーがテキストボックスの外側に押されたほぼすべての*キーに対してポップアップします。 – Herohtar

答えて

9

私は、あなたがそのショートカットを使用する必要があるかどうか疑問に思うことに同意します。しかし、他のユーザーと同じようにGmailの検索ショートカットがそうであるようにした場合、文書のkeydownイベント(keypressやkeyupではなく)をキャプチャして、デフォルトのアクションを止めるだけで停止することができますデフォルトのFirefoxの動作。また、ユーザーがまだテキストフィールドに入力していないことを確認してください。ここに簡単な例があります:

$(document).keydown(function(e) { 
    var _target = $(e.target); 
    var _focused = $(document.activeElement); 
    var _inputting = _focused.get(0).tagName.toLowerCase()==="textarea" || _focused.get(0).tagName.toLowerCase()==="input"; 

    ///(forward slash) key = search 
    if (!_inputting && e.keyCode===191) { 
     e.preventDefault(); 
     $("#search-input").focus(); 
     return; 
    } 
}); 
+1

'keydown'イベントの中の' e.preventDefault() 'もFirefoxで有効になっている"入力を開始するとテキストを検索する "があるときに機能します。 – Herohtar

関連する問題