javascript - `onclick` 不适用于新附加的项目

标签 javascript dom dom-events

我的代码的重要部分:

window.onload = function(){
    function someFunction(){
        [].forEach.call(
            document.querySelectorAll('.button'),
            function(btn){
                btn.onclick = console.log("I BEEN CLICKED!!");
            }
        );  
    }

    someFunction()

};

someFunctionconsole.log 在单击加载时存在的每个 .button 时打印“I BEEN CLICKED”。

如何扩展此功能以适用于稍后仅使用纯 JavaScript(无 jQuery)添加的新附加 .button 元素?

最佳答案

该事件不会为 future 的元素添加,只会为您迄今为止查询过的元素添加。您应该使用事件委托(delegate):

document.addEventListener('click', function(e) {
  if (e.target.matches('.button')) {
    console.log('I have been clicked')
  }
})

这将适用于 future 的按钮,因为您正在捕获对整个文档的点击,但只有在通过点击与 .button 选择器匹配的目标触发事件时才会响应。

在某些旧浏览器中,matches 是前缀,但您可以grab a polyfill .

关于javascript - `onclick` 不适用于新附加的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28256910/

相关文章:

Internet Explorer 中的 JavaScript 错误 "Access is denied"

javascript - Gmaps API - 许多带有图标和标签的标记在移动设备上加载缓慢

javascript - 在 Javascript 中使用 dataTransfer 对象拖放 li 元素

javascript - 在 ember 中继续调用 mouseDown 上的函数

JavaScript 二维数组未定义

javascript - 使用 ionic1 (apk) 与使用 ocrad.js 的 Chrome(调试器)进行图像处理

javascript - Node.childNodes的forEach方法?

javascript - 为什么现代 JavaScript 框架不鼓励与 DOM 直接交互

javascript - DOM Excptn 8 : Adding a Picture to a Div

javascript - 我们如何在 Javascript 中捕获移动设备 "Next"按钮按键