多くの画面とナビゲーションを持つ ajax Web アプリケーションの場合、div、リンク、またはボタンのイベント ハンドラーをアタッチするには、次のようにコーディングできます。
//Using $.on inside Ajax success handler
$("#container").on("click", "#selector", function(event){
});
コンテナーが DOM に存在しない場合、このアプローチは機能しません。機能させるには、コンテナとしてドキュメントまたはボディを使用する必要がありますが、パフォーマンスが良くない場合があります。
Ajax 成功ハンドラーには、多くのコード行が含まれる場合があります。整理しやすくするために、コードを関数に移動し、Ajax 成功ハンドラーでその関数を呼び出すことができます。しかし、すべての順列と組み合わせに対して、多くの登録イベント関数を作成する必要があります。
関数のコードの乱雑さを登録します。
イベント ハンドラーが既に登録されている場合、再度登録すると 2 つの偶数ハンドラーが発生します。そのため、登録を解除して登録する必要があります (または、まだ接続されていない場合にのみ接続します) - パフォーマンスの問題については不明です。
代替案はありますか?
私は次のことを考えています:
- モジュールのコンテナー、ターゲット、およびクリック イベント ハンドラーのマップを 1 か所で維持します。
ajaxComplete グローバル イベント ハンドラーで、xhr.responseHTML にコンテナーがある場合、イベント ハンドラーをターゲット要素にアタッチします (まだアタッチされていない場合のみアタッチします)。
$(document).ajaxComplete(function(e, xhr, settings){ for(ind in clickEventListeners){eventlistner = clickEventListeners[ind]; if($(eventlistner.container,xhr.responseHTML).length > 0){ $(eventlistner.target).on("click",function(){ eventlistner.processor(this); }); } } });
長所 : モジュールのすべてのイベント ハンドラーが 1 か所に文書化されています。ajax 成功ハンドラーごとにコードが煩雑になることはありません。
短所:あるかどうかはわかりません。
提案があれば教えてください。