javascript - 为什么我无法将单击事件添加到动态插入的列表元素?

标签 javascript html debugging addeventlistener

我有一个项目的代码如下所示,我使用 JavaScript 插入列表元素,并单击每个元素,我必须调用一个函数。然而,它似乎不起作用。

var c = document.getElementById("content");

c.innerHTML += "<ul>";
        
for(var j = 0; j<5; j++){
          
    c.innerHTML += "<li id = '" + j +  "'>some stuff"+j+"</li>";
    
    document.getElementById(j).addEventListener("click", function(){ alert('this is test'); }, false);
      
  
}
c.innerHTML += "</ul>";
<div id = "content"> </div>

为什么点击事件没有被触发?我怎样才能做到这一点?

最佳答案

创建一个函数并使用它onclick。您还可以将 this(元素)作为参数传递给函数,您可以在该函数中获取对象属性。

var c = document.getElementById("content");

c.innerHTML += "<ul>";
        
for(var j = 0; j<5; j++){
          
    c.innerHTML += "<li id = '" + j +  "' onclick='alertMe(this)'>some stuff"+j+"</li>";
      
  
}
c.innerHTML += "</ul>";

function alertMe(obj){
alert('this is test from '+obj.id);
}
<div id = "content"> </div>

addEventListener 方法:-

只有将 document.getElementById 添加到 DOM 中后,才能调用它。在附加到 DOM 之前你无法访问它

如果您仍然想使用addEventListener,您可以通过在附加元素后添加监听器来实现,如下所示

var c = document.getElementById("content");

c.innerHTML += "<ul>";
        
for(var j = 0; j<5; j++){
          
    c.innerHTML += "<li id = '" + j +  "'>some stuff"+j+"</li>";
    
    document.getElementById(j).addEventListener("click", function(){ alert('this is test'); }, false);
      
  
}
c.innerHTML += "</ul>";
<div id = "content"> </div>

var c = document.getElementById("content");
c.innerHTML += "<ul>";
for (var j = 0; j < 5; j++) {
  c.innerHTML += "<li id = '" + j + "'>some stuff" + j + "</li>";
}
c.innerHTML += "</ul>";
for (var j = 0; j < 5; j++) {
  document.getElementById(j).addEventListener("click", function() {
    alert('this is test');
  }, false);
}
<div id="content"> </div>

关于javascript - 为什么我无法将单击事件添加到动态插入的列表元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450134/

相关文章:

javascript - AJAX 更新多个数据库表

javascript - 改变 React 渲染结构的最佳方法

c++ - 虚拟方法困惑,我怎样才能找到造成这种情况的原因?

javascript - 为什么每次发送请求时刷新访问 token 是一个坏主意?

javascript - 根据第一个选择的日期限制日期范围

html - 设置文本框的可点击背景

html - 如何使用 CSS 来换行而不是用空格换行?

javascript - 按钮呈现但未调用回调

debugging - 如何使用 Voltron 为 LLDB 自定义 View ?

c# - 调试未启动