AddEventListener 对新添加的 innerHtml 不起作用?
AddEventListener doesn't work on newly added innerHtml?
关于这个问题有很多问题,它们都涵盖了不同的情况。 None 在这种情况下帮助我。
1.I 我没有在“创建”元素之前添加点击监听器,
2。我没有在事件方法中调用回调(而是以更高阶的方式传递它)
3。 num总是正确的
this.update = function(data,status,num){
var raceview = document.getElementById("raceview")
if(status == "domestic"){
raceview.innerHTML += `<div class="race">
<img id="raceprofileimg" src="${data.image}" alt="">
<h3 id ="pendingmessage">Race is Pending</h3>
<h3 id = "username" class="racenames">${data.name}</h3>
</div>`
}
else if (status == "pending"){ //both parties accepted the race
raceview.innerHTML += `<div class="race">
<img id="raceprofileimg" src="${data.image}" alt="">
<h3 id="name${num}" class="racenames">${data.name}</h3>
<button id="${num}" class="racebuttons" type="button">Won</button>
<button id="${num}"class="rejectbuttons" type="button">Loss</button>
</div>`
}
else{
raceview.innerHTML += `<div class="race">
<img id="raceprofileimg" src="${data.image}" alt="">
<h3 id="name${num}" class="racenames">${data.name}</h3>
<button id="race${num}" class="racebuttons" type="button">Race</button>
<button id="reject${num}" class="rejectbuttons" type="button">Reject</button>
</div>`
document.getElementById("race"+num).addEventListener("click",function(){self.accept_race(num,data.name)})
}
}
生成Html:
通过使用 raceview.innerHTML +=
,您将覆盖 raceview
中的所有 DOM 个元素。它们失去了所有事件绑定,因为整个 raceview
元素都被重建了。
我猜最后一个按钮应该有用。
你可以这样解决:
const race = document.createElement("div");
race.classList.add("race");
raceview.appendChild(race);
race.innerHTML = `...`;
document
.getElementById("race" + num)
.addEventListener("click", /* your handler */);
关于这个问题有很多问题,它们都涵盖了不同的情况。 None 在这种情况下帮助我。
1.I 我没有在“创建”元素之前添加点击监听器,
2。我没有在事件方法中调用回调(而是以更高阶的方式传递它)
3。 num总是正确的
this.update = function(data,status,num){
var raceview = document.getElementById("raceview")
if(status == "domestic"){
raceview.innerHTML += `<div class="race">
<img id="raceprofileimg" src="${data.image}" alt="">
<h3 id ="pendingmessage">Race is Pending</h3>
<h3 id = "username" class="racenames">${data.name}</h3>
</div>`
}
else if (status == "pending"){ //both parties accepted the race
raceview.innerHTML += `<div class="race">
<img id="raceprofileimg" src="${data.image}" alt="">
<h3 id="name${num}" class="racenames">${data.name}</h3>
<button id="${num}" class="racebuttons" type="button">Won</button>
<button id="${num}"class="rejectbuttons" type="button">Loss</button>
</div>`
}
else{
raceview.innerHTML += `<div class="race">
<img id="raceprofileimg" src="${data.image}" alt="">
<h3 id="name${num}" class="racenames">${data.name}</h3>
<button id="race${num}" class="racebuttons" type="button">Race</button>
<button id="reject${num}" class="rejectbuttons" type="button">Reject</button>
</div>`
document.getElementById("race"+num).addEventListener("click",function(){self.accept_race(num,data.name)})
}
}
生成Html:
通过使用 raceview.innerHTML +=
,您将覆盖 raceview
中的所有 DOM 个元素。它们失去了所有事件绑定,因为整个 raceview
元素都被重建了。
我猜最后一个按钮应该有用。
你可以这样解决:
const race = document.createElement("div");
race.classList.add("race");
raceview.appendChild(race);
race.innerHTML = `...`;
document
.getElementById("race" + num)
.addEventListener("click", /* your handler */);