1

バックグラウンド

jQuery モーダル ダイアログを使用してフォームを表示します。フォームにはオートコンプリート フィールドがあります。ユーザーがオートコンプリート ドロップダウンからオプションを選択すると、フォームはフォーカスを失います。jQuery ダイアログは ESC キーを検出しますが、ENTER キーは検出されません。さまざまなボタンを持つ (同じページ上の) いくつかのフォームの 1 つを検討してください。

コード

ENTER キーが押されたことを検出するソース コード:

  $(form).keyup(function( e ) {
    // Submit and close when Enter key pressed by triggering the accept button.
    //
    if( e.keyCode == $.ui.keyCode.ENTER ) {
      sequenceNumber = 0;
      $(this).parent().find( "#accept" ).trigger( 'click' );
    }
  });

これは、フォームのいずれかのフィールドにフォーカスがある場合はいつでも、期待どおりに機能します (「受け入れる」ボタンがトリガーされ、サーバーは値を正常に受け取ります)。

問題

ダイアログが表示されているがフィールドにフォーカスがない場合 (たとえば、ユーザーが上の画像で「魚の切り身」をクリックした場合)、Enter キーを押しても、keyup イベントは発生しません。

質問

フォームにフォーカスがなく、jQuery ダイアログがまだ開いている場合、どのようにして ENTER イベントを受け取ることができますか? (jQuery ダイアログが ESC キーを押してキャンセルし、ダイアログを閉じるのと同じ方法です。)

ありがとうございました!

4

1 に答える 1

1

代わりにボディにトリガーを追加し、フォームが表示されているかどうかを確認します。

$('body').keyup(function( e ) {
  if( e.keyCode == $.ui.keyCode.ENTER ) {
    if( $("#myform").is(":visible") ) {
      // Enter was pressed and form is visible
    }
  }
});
于 2012-04-24T19:58:20.573 に答える