2014-10-10 43 views
1

我有一些JavaScript成功地克隆模板並將生成的html附加到div。但是,當我試圖引用克隆的元素時,它不可訪問,即使如果我將與模板(和克隆系統)外部完全相同的元素(使用Firebug確認)完全相同的元素進行訪問,也是可訪問的。我相信我需要在克隆後做一些更新,但我不確定。我試圖用它來訪問(克隆)元(不記錄任何東西到控制檯,不工作)的代碼是:點擊克隆的元素無法正常工作Javascript

$("#depminusbutton0").on("click", function() { 
    console.log('I triggered minus 0'); 
}); 

而且depminusbutton0顯示了這樣的螢火一次克隆檢查元素(沒有按」之前克隆牛逼存在,因爲ID 0動態插入:

<a id="depminusbutton0"> 

任何想法如何,我可以讓這個元素訪問

+0

您是否克隆了具有相同ID的元素? – rayfranco 2014-10-10 02:27:35

+0

你怎麼克隆?看到這裏:http://stackoverflow.com/questions/9549643/jquery-clone-not-cloning-event-bindings-even-with-on – 2014-10-10 02:41:56

回答

1

兩種可能性,我能想到的:

  1. 您是在元素存在之前安裝事件處理程序,以至於無法找到將該事件處理程序附加到的元素?
  2. 您在文檔的其他地方有衝突的ID。

如果你打算使用這種形式的事件處理:

$("#depminusbutton0").on("click", fn); 

然後,#depminusbutton0元素必須在你運行該代碼行的時間存在。它將在您運行代碼時搜索該元素的DOM,並且不會連接到與您將來創建的ID相匹配的元素。

您可以通過在創建#depminusbutton0元素後運行該代碼行並將其插入到DOM中來解決該問題,也可以切換到使用將事件處理程序附加到公共父級的委託事件處理在創建子元素之前存在。

要了解更多關於如何委派事件處理工作,看到這些參考資料:

jQuery .live() vs .on() method for adding a click event after loading dynamic html

Does jQuery.on() work for elements that are added after the event handler is created?

一般的想法是這樣的:

$(some parent selector).on("click", "#depminusbutton0", fn); 

如果你有#depminusbutton0 ID的多個元素,那麼你將不得不解決這個問題,只有一個元素帶着那個ID。通常在使用克隆時,您想使用類名而不是id,因爲您可以使用多個具有相同類名的元素。

+0

#1是答案,我有事件處理程序代碼安裝之前創建遞增的按鈕。我將該代碼創建移動到按鈕的創建模板中,這也減少了總代碼,並且它像魅力一樣工作。如果可以,我會鼓勵你,但是沒有足夠的聲望去做。 – edencorbin 2014-10-10 15:24:37

+0

@bobbydoogle - 您可以通過選中最能幫助您的答案左側的綠色複選標記來選擇「最佳答案」。這也將爲您遵循這裏的程序贏得一些聲望點,並獎勵提供答案的人。 – jfriend00 2014-10-10 15:58:28

1

您是否將事件附加到尚不存在的元素?如jQuery documentation中所述:

事件處理程序僅綁定到當前選定的元素;它們必須在代碼調用.on()時存在於頁面上。

只要確保在創建後將事件附加到克隆的元素上。

+0

這是問題,謝謝,如果我有更多的聲望,我會喜歡。 – edencorbin 2014-10-10 15:25:01