javascript - 向 Javascript 中的每个元素添加简单事件

标签 javascript dom-events

我正在尝试将事件动态添加到 html 中的每个元素,使用 data-* 获取所有元素并使用 forEach 进行迭代。但是当我在任何按钮中触发事件时,它会在页面中返回未定义的值,看起来它丢失了这个内部函数的引用,我真的不知道发生了什么。动态添加事件的最佳方法是吗?

https://jsfiddle.net/tmmdsgoq/1/

<button data-event data-text="Button 1">Button 1</button>
<button data-event data-text="Button 2">Button 2</button>
<button data-event data-text="Button 3">Button 3</button>

<div id="container">

</div>

<script>
function init(){
 var elements = document.querySelectorAll("[data-event]");  
 elements.forEach(function(el){
  el.addEventListener("click", function(){
   document.querySelector("#container").innerHTML += this.text;
  });
 });
}

init();

</script>

最佳答案

  1. 使用textContent属性而不是 text ,从而消除了 data-text 的需要.
    只有几种类型的 HTML 元素支持text属性(property)根据HTML5 specification :<title> , <a> , <option> , <script> , <body> .
  2. 当心 document.querySelectorAll结果可能没有forEach旧版浏览器中的方法。
  3. 使用 devtools(F12 键)调试器通过在循环内设置断点来检查值。

关于javascript - 向 Javascript 中的每个元素添加简单事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38466326/

相关文章:

javascript - 如何编写一个 js 来替换标签内的文本?

javascript - 如何在 DIV 元素上合成浏览器点击事件?

javascript - 单击新多边形检索已删除的 TOPOJSON 多边形

单击按钮时,Javascript 隐藏某些表格行

javascript - jQuery AJAX $.post 不适用于 .click() 方法

javascript - object.watch(), 获取新值

javascript - 给定方法的正确签名应该是什么

javascript - 如何从Canvas获取像素数据

javascript - 带有验证和隐藏字段值的提交按钮

javascript - 当某些内容添加到 Javascript 中的队列或数组时触发事件