创建新元素后解决事件问题?

选择用户

当我单击项目时,它显示了clicked元素,但是在创建新项目后,它不适用于新项目。

我知道这是在第一个项目选择器中 发生的let items = document.querySelectorAll('.item');,它仅在创建新项目后加载页面时保存元素,这不会影响项目选择器。但是我需要修复它。如果我创建新项目,则它应适用于所有项目(新旧项目均适用)。

//for some stuff..
let

    items = document.querySelectorAll('.item');

items.forEach( (elm) =>{
  elm.addEventListener('click', ()=>{
      console.log(
        elm.innerText
      );
  })
});


//create new one
let

  btn = document.querySelector('button'),
  app = document.querySelector('.app-view'),
  dataId = 0;


btn.addEventListener('click', ()=>{
  dataId++;
  
  let 
    
    newItem = document.createElement('div');
  
  newItem.className = 'item';
  newItem.innerHTML = `I am from planet ${dataId}`;
  app.insertAdjacentElement ('beforeend', newItem);
  
});
.item{
  padding: .25rem 1rem;
  font-family: "Helvetica";
  color: purple;
  user-select:none;
  
}

.item:hover{
  cursor: default;
  border: 1px dotted #000;
}

.default-item{
  color: #007bff;
}

button{
  position: fixed;
  top: 1rem;
  right: 1rem;
  padding: .5rem 1rem;
}
<div class="app-view">
  <div class="item default-item">Default Item</div>
</div>

<button>
  Create New
</button>

莱昂内尔·罗

考虑使用事件委托:

const itemContainer = document.querySelector('.app-view');

itemContainer.addEventListener('click', event => {
  if (event.target.classList.contains('item') {
    // do stuff
  }
});

请注意,它必须使用event.target(单击的元素),而不是event.currentTarget(侦听器所连接的元素)。

您可以在此博客文章中找到更多信息:JavaScript事件委托的工作原理

事件委托使您可以避免将事件侦听器添加到特定节点;而是将事件侦听器添加到一个父级。该事件侦听器分析冒泡事件以找到子元素的匹配项

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

添加新元素后未触发事件

来自分类Dev

从jquery帖子创建的新元素的Click事件

来自分类Dev

在事件上创建和显示新元素(React.JS)

来自分类Dev

在jQuery中创建新元素时出现问题

来自分类Dev

循环创建新元素

来自分类Dev

动态创建新元素

来自分类Dev

新元素的事件侦听器(单击)。

来自分类Dev

jQuery绑定事件到新元素

来自分类Dev

创建新元素时创建jQuery

来自分类Dev

添加新元素后如何更新列表

来自分类Dev

牵线木偶递增后显示新元素

来自分类Dev

Clearcase在特定分支中创建新元素

来自分类Dev

jQuery:使用数据属性创建新元素

来自分类Dev

如果条件满足,XLS创建新元素

来自分类Dev

如何更改值并创建新元素?

来自分类Dev

Java ArrayList新元素未创建

来自分类Dev

不必每次都创建新元素吗?

来自分类Dev

jQuery 创建一个新元素

来自分类Dev

如何在 html 中创建新元素?

来自分类Dev

JavaScript 使用 for 循环创建新元素

来自分类Dev

除第一个字段外,每个按键事件都将创建新元素

来自分类Dev

jQuery事件未触发页面加载后创建的DOM元素

来自分类Dev

元素获取类后创建自定义事件

来自分类Dev

用html模板单击元素后添加新元素

来自分类Dev

用html模板单击元素后追加新元素

来自分类Dev

添加新元素后,附加元素消失,单击 addEventListener

来自分类Dev

创建新元素并将其添加到父元素

来自分类Dev

比较列表中的元素并创建一个新元素

来自分类Dev

jQuery事件在新元素上触发了两次