8

仕事のために継承したJavaScriptがいくつかあります。この JavaScript には、常に (1 ~ 10 分ごとに) 更新されるサイド バーがあります。スクリプトでは、サーバーからの AJAX を解析および処理してから、興味深い関数を呼び出します。

function renewClicks(){
    $('.classElem').unbind('click'); 
    $('.classElem2').unbind('click');
    $('.classElem3').unbind('click'); 

    $('.classElem').click(elm1funct); 
    $('.classElem2').clikc(elm2funct);
    $('.classElem3').click(elm3funct);  
}

.classElem は、ページに追加される各画像に追加される css クラス セレクターです。elmfunct は、クリックを処理するために作成された関数です。これは、更新ごとに実行されます (有効な既に追加された要素の認証を解除し、それらをすべて再追加します)。DOM の body 要素にリスナーをアタッチして、ページに追加され、css クラスを継承するすべての画像要素が既に処理されているため、登録解除および再登録されないようにする方法があるかどうかを知りたい更新ごとに登録されます。

提供できる情報をありがとうございます。

4

2 に答える 2

11

これを試すことができます:

$('body').on('click','.classElem',elm1funct)
         .on('click','.classElem2',elm2funct)
         .on('click','.classElem3', elm3funct);

jQueryのドキュメントから:

委任されたイベントには、後でドキュメントに追加される子孫要素からのイベントを処理できるという利点があります。委任されたイベント ハンドラーがアタッチされた時点で存在することが保証されている要素を選択することで、委任されたイベントを使用して、イベント ハンドラーを頻繁にアタッチおよび削除する必要がなくなります。

于 2013-07-03T16:13:55.097 に答える
10

@crush が述べたように、イベント デリゲート アプローチを使用して、イベントのバインド解除と再バインドを回避します。

$(document).on('click', '.classElem', elm1funct);
于 2013-07-03T16:12:21.353 に答える