0

JQueryUIWebサイトからJQueryUIダイアログフォームのサンプルを取得しました。

ダイアログを開いてフォームが表示されたら、キーを押すとフォームが送信されるようにしたかったので、onReady()に次を追加しました。

$ .extend($。ui.dialog.prototype.options、{open:function(){var $ this = $(this);

      // focus first button and bind enter to it
      $this.parent().find('.ui-dialog-buttonpane button:first').focus();
      $this.keypress(function(e) {
          if( e.keyCode == 13 ) {
              $this.parent().find('.ui-dialog-buttonpane button:first').click();
              return false;
          }
      });
  } 

});

これは完全にトリックを実行します(つまり、click()が必要なときにトリガーされます)が、次のようになります。

キーを押してフォームを最初に送信すると、送信は1回実行されます。

ダイアログを再度開いて、キーを押して再度送信すると、フォームが2回送信されます。

ダイアログを再度開いて、キーを押して再度送信すると、フォームは3回送信され、以下同様に続きます。

これは、次のフィドルでテストできます:http: //jsfiddle.net/fWW2E/

専用の「送信」ボタンをクリックしてこれを行うと正しく機能することを付け加えておきます。これは、キーを押す必要がある場合にのみ失敗します。

何か案は ?

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

4

1 に答える 1

0

これは「開く」に割り当てており、ボタンがダイアログを「閉じる」ためです。

これが呼び出されたとき:

$('something').dialog('close');

実際に要素を削除するのではなく、単に非表示にします。したがって、次にクリックして「新しい」ダイアログを開くと、実際には最初のダイアログが再び表示されます。ただし、「open」イベントは、開かれるたびに再度発生し、新しいキープレスハンドラーが追加されます。

これがフィドルです。私は実際に、その要素の現在のハンドラーの配列をコンソールに書き出します。ダイアログを開くたびに、別のキー押下ハンドラーがあることがわかります。

デモ

于 2012-07-19T22:14:25.137 に答える