2013-05-16 3 views
6

これまで同様の質問がされていたことは知っていますが、私が見ている動作は少し違っています。Chromeのテキストエリア内でタブキーをクリックするとpreventDefault()が発生する

私はいくつかのjqueryアコーディオンタブに分割しているフォームを持っています。私は、ユーザーがタブ1の下にテキストフィールドを記入し、タブ2を自動的に開いてそのタブのテキストフィールドにフォーカスを置くためにタブキーをキーダウンできるようにしたい。私が抱えている問題は、Chromeのデフォルトのタブキーダウンの動作を妨げることです。

$("form#new_story").keydown(function (e) { 
    if(!e) var e = window.event; 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 9) { 
     e.preventDefault(); 
     alert("tab was keyed"); 
    } 
}); 

私はこれをChrome、FF、Safariでテストしました。 FFやSafariでうまく動作しますが、Chromeを使用しているユーザーがタブキーをキーダウンすると、実際のタブがイベントのトリガー前にテキストフィールドに入力されます。私はこの動作を停止したいと思いますが、イベントがトリガーされる前にタブが明確に入力されています。これをやめる方法はありますか?

+0

タブは* keydownイベントの前に*入力されていますか?聞こえそうもない。しかし、それを防ぐために、 'keypress'をフックして抑制することができます。 – Bergi

+0

'keypress'はタブプレスをキャプチャしませんでした。(私は' keypress'が古いバージョンの非文字キーをキャプチャしないことを知っています。)Chromeの文字以外のキーをキャプチャしないことを知らなかった。問題を見つけました。これはjqueryアコーディオンとjquery validateの間の非常に面白い相互作用です。 –

答えて

1

jqueryの検証によって問題が発生したことがわかります。私は、このオプションのセットでフォーム内の各テキストフィールドを検証しました:

$("form#new_story").validate({ 
         ignore: [], 
         onkeyup: false, //stop eager validation of fields so to not hit server each time user clicks a key in the email field 
         onfocusout: true, 
         ... 
        }; 

できるだけ早く私はonfocusout: falseを設定するように私は予想通り、タブのKeyDownイベントをキャプチャすることができました。

これがなぜこのようになるかわかりません。 jqueryアコーディオンまたはjqueryバリデーションのいずれかのバグである必要があります。

関連する問題