2017-02-20 22 views
1

我想爲動態創建的元素添加「點擊」偵聽器。我的代碼是:Javascript按類名添加對象的監聽器

function addListenerToElements(){ 
     var aTags = document.getElementsByClassName("classElements") 
     for (var i=0;i<aTags.length;i++){ 
      aTags[i].addEventListener('click',myFunction); 
     } 
    } 

    function myFunction() { 
     console.log("something"); 
    } 

,但它不工作(沒有在控制檯中沒有錯誤)

+0

什麼瀏覽器是你在用嗎? –

+0

我正在使用firefox –

回答

0

至於你說的動態添加元素,事件代表團會是更好的路要走。下面以靜態的元素,同時也爲動態添加的那些作品:

document.getElementById("container").addEventListener("click", function(e) { 
 
    if (e.target && e.target.matches("div.className")) { 
 
    console.log('element clicked', e.target.innerText); 
 
    // or call your function 
 
    } 
 
}); 
 
var index = 0; 
 
document.getElementById('add').addEventListener('click', function(e) { 
 
    var div = document.createElement('div'); 
 
    div.appendChild(document.createTextNode(index++)); 
 
    div.className = 'className'; 
 
    document.getElementById('container').appendChild(div); 
 
});
<div id="container"> 
 
    <div class="className">a</div> 
 
    <div class="className">b</div> 
 
    <div class="className">c</div> 
 
    <div class="className">d</div> 
 
    <div class="className">e</div> 
 
</div> 
 
<button id="add">Add Element</button>

+0

unfortunatelly我無法將id添加到容器 –

+0

然後使用容器的類或第一個元素的父節點@PaulGerbert – baao

+0

我使用了容器的類,但它返回數組(?),然後返回數組試圖添加偵聽器到數組中的每個元素,但不起作用 –

0

好你錯過的東西在這裏,該事件不會註冊,直到調用函數

addListenerToElements(); 

https://jsfiddle.net/xrqnn20f/1/

addListenerToElements(); 
function addListenerToElements(){ 
     var aTags = document.getElementsByClassName("classElements") 
     for (var i=0;i<aTags.length;i++){ 
      aTags[i].addEventListener('click',myFunction); 
     } 
    } 

    function myFunction() { 
     console.log("something"); 
    }