javascript - For 循环在 1 处停止,不计算添加到 DOM 的元素

标签 javascript for-loop

我正在尝试使添加的每个子输入都具有与父输入相同的事件监听器。

片段(also on Codepen):

var main = document.getElementById("main").getElementsByTagName("a");

var button = document.createElement('input');

// Loop over A tags in #main
for (var i = 0; i < main.length; i++) {
  // # of A tags
  console.log(main.length);
  // Event listener per # of A tags
  main[i].addEventListener("click",function(e){
    // Clone parentElement #main
    var node = e.target.parentElement;
    var clone = node.cloneNode(true);
    // Append to DOM
    document.getElementById('main').appendChild(clone);
  });
}
<div id="main">
  <div class="input__container">
  <label>Input</label>
  <input placeholder="Placeholder..." class="input" id="" name="" type="text"/>
  <a class="btn">+</a>
  </div>
</div>

最佳答案

不要尝试复制事件处理程序,而是使用附加到#main的单个委托(delegate)事件处理程序:

var main = document.getElementById("main");

main.addEventListener("click", function(e) {
  // Delegated event handler returning early if wrong target
  if (!e.target.matches(".btn")) return;
  // Clone parentElement .input__container
  var node = e.target.parentElement;
  var clone = node.cloneNode(true);
  // Append to main
  this.appendChild(clone);
});
<div id="main">
  <div class="input__container">
    <label>Input</label>
    <input placeholder="Placeholder..." class="input" id="" name="" type="text" />
    <a class="btn">+</a>
  </div>
</div>

关于javascript - For 循环在 1 处停止,不计算添加到 DOM 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53507079/

相关文章:

python - 关于获取 python 数据框的行和

两个 vector<string> 的 C++ For 循环及其到​​字符串的位置

java - 如何只返回一个公共(public)值?

javascript - jQuery AJAX 多次调用错误处理

javascript - 为什么我的元素不是 :contains(variable) work when using variable instead of string? jquery

javascript - 谷歌地图物化选项卡下的 map

javascript - 使用带有结构化过滤器的 bootgrid 更新 Change.search 上的参数变量

Python - 从文件中读取第二列

java - for 循环和 ArrayList<Integer>

javascript - 解析已知键的字符串正则表达式,但保留分隔符