2011-07-09 53 views
3

克隆select元素並遞增「name」屬性後,我無法選擇克隆的元素。無法在jquery中選擇克隆的元素

例如:

HTML

<select name="1"></select> 

<select name="1-1"></select> <!-- cloned element --> 
<select name="1-2"></select> <!-- cloned element --> 

JS

$('[name^="1"]').change(function() { 
    alert(1); 
}); 

當我改變原來的元素,它工作正常,我得到的警報,但是當我改變克隆的一個元素,沒有任何反應。沒有錯誤。

注:我使用的「name」屬性,而不是ID,因爲我需要一次提交表單

檢索這些克隆的元素值應當這項工作?還是不能選擇克隆的元素?

+0

當我檢查ct元素克隆的元素具有正確的名稱 – Tim

+1

如果要在加載頁面後動態添加元素,請使用live()或delegate()連接事件偵聽器。當代碼在頁面加載時運行時,正常的處理程序會被綁定,所以如果您在該點之後進行克隆,則不會有新元素的處理程序。 – kinakuta

+0

yep元素在頁面加載後被克隆。我真的不知道如何使用實時或委託 – Tim

回答

3

這裏的文檔鏈接,live()DOC,這裏是一個爲delegate()DOC

$('[name^=1]').live('change', function(){ 
    console.log('hi!'); 
}); 

雖然功能不同於常規的事件處理程序(它實際上是監聽的文檔事件,所以它「處理」傳播事件。代理更有效一些,因爲你可以給它一個上下文來監聽:

$('form').delegate('select[name^=1]', 'change', function(){ 
    console.log('hi there!'); 
}); 
+1

或者,當您通過傳遞參數「true」的克隆將導致它克隆分配給前一個對象的事件。 $(this).clone(true) –

+0

這是真的。如果您只需要已經綁定到原件的事件,那麼在語法上就會更清晰。這個上下文中的live()和delegate()對於您可能要附加的不同事件偵聽器更有用。 – kinakuta