2015-09-06 10 views
5

this質問。タブキー・イベントをトリガーする以外にも他のアプローチがあることがわかりますが、なぜタブキー・プレス・イベントをトリガーしても次の入力フィールドにフォーカスが移動しないのはなぜか知りたいです。タブキーを押すと、次の入力フィールドにフォーカスが移動しないのはなぜですか?

Code Pen

HTML

<textarea></textarea> 
<textarea></textarea> 
<textarea></textarea> 

JS

$('textarea').on('keydown', function(e) { 
    if (e.metaKey && e.which === 40) { 
    console.log('test'); 
    $(this).trigger({ 
     type: 'keypress', 
     which: 9 
    }); 
    } 
}); 

答えて

6

TABイベントは、フォーカスを変更するためのネイティブブラウザイベント/アクションですので。 .trigger()関数は、割り当てられたイベントハンドラのみをトリガーします。

.trigger()関数は、ファイル入力ボックスまたはアンカータグをクリックするなどのネイティブブラウザイベントを模倣するために使用することができない。jQuery's siteからのより多くの情報がある注意してください。これは、これらのイベントに対応するjQueryのイベントシステムを使用してイベントハンドラがアタッチされていないためです。

これを処理するには、jquery-simulateと呼ばれるプラグインがあります。フォーカスが変更されているtabというのは、実際にはWebブラウザのデフォルト動作です。手動でイベントを発射

注意は、そのイベントに関連付けられたデフォルトのアクションを生成しません:ブラウザのネイティブイベントを発射することは、KeyboardEventsのドキュメントが言及として、それは、デフォルトのアクションですやるという意味ではありません。たとえば、キーイベントを手動で起動しても、その文字がフォーカスされたテキスト入力に表示されることはありません。 UIイベントの場合、セキュリティ上の理由から、スクリプト自体がブラウザとやりとりするユーザーアクションをシミュレートできないため、これは重要です。

+0

だから 'イベントをINGの.triggerは()'など...手動でイベントをトリガと同じではないでしょうか?それは誤解を招く。それとも私は行方不明のものがありますか? –

+0

[this](http://codepen.io/anon/pen/yYNLjE?editors=101)がうまくいかない理由は何ですか?あなたにリンクされたページ(https://learn.jquery.com/events/triggering-event-handlers/#how-can-i-mimic-a-native-browser-event-if-not-trigger)[言います] "...実際に誰かが実際に行ったように振舞うイベントをプログラムで作成することができます..."。私は、[この](https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events)ガイドのすべてをしたが、それが動作していないようです。 [ 'KeyEvents'](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)のドキュメントに、実際には少し誤解を招くようです –

+2

@AdamZerner。言及ページの下部にある注意事項があります:*「手動でイベントを発火注意がそのイベントに関連付けられたデフォルトのアクションを生成しません。例えば、手動でキーイベントを発射すると、その文字が集中に表示されません。それはブラウザ自体と対話ユーザーアクションをシミュレートするから、スクリプトを妨げるようなテキスト入力はUIイベントの場合、これは、セキュリティ上の理由のために重要である。」* –

関連する問題