2016-12-02 79 views
1

我想動態添加鏈接並在其上附加「onclick」事件。這裏是我有什麼簡化版本:「click」爲動態創建的鏈接沒有被觸發

for (var i = 0; ....) { 
    var a1 = document.createElement("a"); 
    a1.innerHTML = "My link123"; 
    a1.addEventListener("click", function(event) { 
     myFunc(someArray[i].property1, event); 
     // alert("test123"); 
    }); 

    var p1 = document.createElement("p"); 
    var sp1 = document.createElement("span"); 
    //.......... 

    divContainer.innerHTML += a1.outerHTML + p1.outerHTML + sp1.outerHTML; 
} 

但它不會觸發「點擊」事件,當我點擊它。

更新

它的創建後,我點擊它,我得到: myFunc(someArray[i].property1, event); -- Cannot read property 'property1' of undefined

我想這件事情關係到clojures如何評估。

UPDATE2

我已經試過這樣:

a1.addEventListener("click", function(event) { 
    (function(i2){ 
    myFunc(i2, event); 
    })(myArray[i].property1); 
}); 

但它在運行時說,當我點擊它 「property1沒有定義」;我該如何解決這個問題?

+3

如果您希望點擊事件保持不變,您應該'.appendChild(a1)',而不是複製生成的HTML。 –

+1

這也將是相關的:[JavaScript閉合內部循環 - 簡單實用的例子](http://stackoverflow.com/q/750486/218196) –

+0

@MikeMcCaughan,實際上我有其他的HTML元素動態創建,爲他們我正在使用「outerHTML」。我怎樣才能將這兩種方法結合起來? – Kooooro

回答

2
divContainer.innerHTML += a1.outerHTML + p1.outerHTML + sp1.outerHTML; 

你(已經兩個新的和那些在divContainer)連載的DOM節點的HTML,這不包括事件偵聽器,然後從HTML創建新的DOM節點。

使用appendChild和朋友。

divContainer.appendChild(a1); 
divContainer.appendChild(p1); 
divContainer.appendChild(sp1); 
+0

@Joshimari - 它的確如此:http://jsbin.com/natuqe/1/edit?html,js輸出 – Quentin

+0

謝謝。請看我的更新。 – Kooooro

+0

@Joshimari - 這是一個不同的問題。正如Felix所說:請參閱http://stackoverflow.com/q/750486/218196 – Quentin