Javascript 按类名添加对象监听器

标签 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");
    }

但它不起作用(控制台中没有错误)

最佳答案

正如您所说的动态添加元素,事件委托(delegate)将是更好的方法。以下适用于静态元素,也适用于动态添加的元素:

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>

关于Javascript 按类名添加对象监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42343471/

相关文章:

javascript - 如何在 ASP.NET 异步回发之前禁用或删除不必要的表单元素?

javascript - 根据权限在 SharePoint 快速启动中隐藏链接

javascript 在不同的浏览器中表现不同

javascript - 如何将 javascript 数组发送到 php

javascript - Windows 商店应用程序的语言选择 : C++ or javascript ?

javascript - href安全,防止xss攻击

javascript - 使用javascript获取CSS样式属性

javascript - 如何从异步调用返回响应?

javascript - 使用angularjs分页,所有页面显示相同的数据

javascript - 为什么这个 javascript 循环打印出数字而不是选项?