2014-03-28 90 views
0

我有一組三個元素。當用戶點擊某個元素時,通過ajax加載頁面之後還有許多即將到來的元素。我遍歷每個初始元素和事件附加到他們這樣的:jQuery事件委託和附件問題

tagSet.each(function(index, element){ 

    tagSet.eq(index).on("click",function(){alert("Alerted! Clicked")}); 
} 

但是,這種方法的AJAX創建的元素不會與一個事件進行安裝。因此,我必須做出改變的一點點對(),它容納了ajax創建的元素:

tagSet.each(function(index, element){ 

    $(document).on("click",tagSet.eq(index),function(){alert("Alerted! Clicked")}); 
} 

它解決事件附件的問題,這些AJAX創建的元素,但引出了另外一個問題。它以一種方式附加事件,使得頁面的所有元素一次觸發該特定事件。我的意思是,因爲我有三個元素,點擊其中一個會導致觸發全部三個alert("Alerted!Clicke!)。什麼是問題和解決方案?

+0

您需要將選擇器作爲第二參數傳遞給'.on'。 –

+0

告訴我們tagSet是什麼,我們將告訴你如何避免這個愚蠢的循環 – adeneo

+0

tagSet是一個匹配集合,三個''標籤 –

回答

1

使用事件委託綁定到與查詢匹配的所有當前和未來的項目:

$(document).on("click", ".some-class-here", function(){ 
    alert("Alerted! Clicked") 
}); 

替換.some-class-here與匹配您的tagSet元素選擇。然後刪除您的電話$.each

+0

您會解釋更多關於'$ .each'的信息 –

+0

使用'each'將'tagSet'中的每個項目的事件處理程序綁定到'document'元素一次。這違背了使用事件委託的目的之一(單個事件的事件處理程序更少)。 –

+0

你回答的是伎倆......非常感謝...... –