jQueryデータテーブルを使用していくつかのデータを表示しています。各行には編集ボタンがあり、クリックハンドラーをに登録してlive()
、ページ付けで機能するようにします。すべての行に対して実行する必要があるため、クラスごとに実行しています。のようなもの:
ライブクリックイベント機能を備えたデータテーブル
これは正常に機能しますが、ユーザーが再度検索を実行し、新しい結果のセットをフェッチするためにajaxリクエストを実行すると、問題が発生します。
dom内の既存のテーブルを新しいテーブルに置き換えるだけです。行1をクリックすると、行1の編集ダイアログがポップアップします。行2をクリックすると、行1の編集ダイアログがポップアップします。もう一度行2をクリックすると、行2の編集ダイアログがポップアップします。
次に、3行目を何度もクリックします。行3のダイアログが表示される前に、行2の編集ダイアログが3回ポップアップ表示されます。
これは増え続けています。div内のdataTable全体をjQueryに置き換えるのかどうかわかりませんが、なぜ複数のイベントを登録する必要があるのですか?
重要な場合は、ダイアログ初期化子でautoopenをfalseに設定し、明示的に開いたり閉じたりします。
編集(詳細):
例を作成するのに苦労しています...しかし、もう少し詳しく説明します...live()
関数を使用してページ間で呼び出しを登録しているので、クリック登録メカニズムが存在することがわかりました。したがって、テーブルを同じ構造に置き換えると、の最初の呼び出しによってクリック関数が登録されますlive()
。live()
しかし、デフォルトで別の呼び出しを行うと、2つのクリックイベントが登録されます。その後、再度交換すると、3回のイベントクリックが登録されます。click()
クリックイベントが既に登録されているかどうかを確認した後、jQueryにイベントを登録してこれを克服しようとしました。複数のイベントの部分を支援しますが、データテーブルページ全体でイベントを登録しません。