-1

プラグインによって作成されたクリック イベントがあり、$.ajax をロードして、クリック イベントを含む領域のみを置換 (更新) すると、イベントが失われます。

 <span ref='B'><span ref='A'></span></span>   
//click event is on A, but I replaced the html inside of B to <span ref='A'></span>;  
its update, so the replaced html are the same.

関連する多くの問題を読みましたが、解決策が見つかりました

.live() //  will not work
.delegate(), // work
.on(), // work

解決策は、A の代わりに B にイベントをバインドする必要があることB.on('click', A, function(){})です ....

ただし、私の構造は変更が非常に難しいため、交換または代替中に失われたイベントを防ぐことができるソリューションを見つけたいと考えています。

アドバイスください、よろしくお願いします。


detach() を使用して解決

4

3 に答える 3

1

イベントバインディングはDOM要素のコンテキスト内に存在するため、DOM要素の削除または置換を開始するときは、イベントバインディングを再確立するための何らかのメカニズムが必要です。

良いアプローチは、親要素を介して委任を使用することです(あなたが述べたように- B.on('click', A, function(){})....)。

もう1つの方法は、問題のDOM要素が削除または置換された時点で常にバインディングを再確立することです(したがって、シナリオでは、これはAjaxコールバック/完了ハンドラーにある必要があるようです)が、これは一般的に、アプローチは貧弱であり、委任方法よりもはるかにエレガントではありません。

于 2013-01-08T06:05:30.887 に答える
1

onページ上の特定の要素にイベントを適用することに懸念がある場合。次に、イベントをにバインドすることをお勧めしdocumentます。

$(document).on('click', '#id-of-a', function(){

});

これに関する詳細については、このブログ投稿をお読みください。

于 2013-01-08T06:06:36.537 に答える
0

私は解決策を見つけました。これは.detach()を使用して可能です!テスト済み。

于 2013-01-08T06:11:48.437 に答える