[英]addEventListener problems on dynamic created button within a for loop
I made some elements in JavaScript that i add to the website. 我在JavaScript中添加了一些添加到网站的元素。 When i add an eventlistener to the button, only the first button works and runs the function.
当我向按钮添加事件监听器时,只有第一个按钮可以工作并运行该功能。
I used to do this before and worked fine, any idea what i'm doing here wrong? 我以前曾经这样做,并且工作得很好,知道我在这里做错了吗?
my javascript function: 我的JavaScript函数:
function laadProjectDetails(){ fetch("restservices/projectdetails") .then(response => response.json()) .then(function(myJson) { for (const object of myJson) { var projextX = '<div class="row"><div class="cause content-box"><div class="col-md-5 col-sm-6"><div class="img-wrapper"><div class="overlay"></div><img class="img-responsive" src="assets/img/causes/img-1.jpg" alt=""></div></div><div class="col-md-7 col-sm-6"><div class="info-block"><h4><a href="#">'+object.projectNaam+'</a></h4><p>'+ object.projectBeschrijving +'</p><div class="foundings"><div class="progress-bar-wrapper min"><div class="progress-bar-outer"><p class="values"><span class="value one">Opgehaald: XXXX</span>-<span class="value two">Doel: €'+object.totaalBedrag+'</span></p><div class="progress-bar-inner"><div class="progress-bar"><span data-percent="55"><span class="pretng">55%</span> </span></div></div></div></div></div><div class="donet_btn"><input id="'+object.projectID+'" type="submit" value="Doneer" class="btn btn-min btn-solid"></input></div></div></div></div></div>'; document.querySelector("#showProject").innerHTML += projextX; var valueVerwijder = document.querySelector("div.donet_btn input[value='Doneer']"); valueVerwijder.addEventListener("click", doneerFunc); } }); } laadProjectDetails(); function doneerFunc(){ console.log("test"); }
You are adding event listener to the first matching selector. 您正在将事件侦听器添加到第一个匹配的选择器。 Try to do:
试着做:
var valueVerwijder = document.getElementById(object.projectID);
valueVerwijder.addEventListener("click", doneerFunc);
Assuming object.projectID has a unique ID 假设object.projectID具有唯一的ID
From querySelector documentation : 从querySelector文档中 :
Return value
返回值
A Element object representing the first element in the document that matches the specified set of CSS selectors, or null is returned if there are no matches.
表示文档中与指定的CSS选择器集匹配的第一个元素的Element对象,如果不存在匹配项,则返回null。
You're adding event listener only to first button that matches selector. 您仅将事件侦听器添加到与选择器匹配的第一个按钮。 Instead, you could use element id:
相反,您可以使用元素ID:
function laadProjectDetails(){
fetch("restservices/projectdetails")
.then(response => response.json())
.then(function(myJson) {
for (const object of myJson) {
var projextX = '<div class="row"><div class="cause content-box"><div class="col-md-5 col-sm-6"><div class="img-wrapper"><div class="overlay"></div><img class="img-responsive" src="assets/img/causes/img-1.jpg" alt=""></div></div><div class="col-md-7 col-sm-6"><div class="info-block"><h4><a href="#">'+object.projectNaam+'</a></h4><p>'+ object.projectBeschrijving +'</p><div class="foundings"><div class="progress-bar-wrapper min"><div class="progress-bar-outer"><p class="values"><span class="value one">Opgehaald: XXXX</span>-<span class="value two">Doel: €'+object.totaalBedrag+'</span></p><div class="progress-bar-inner"><div class="progress-bar"><span data-percent="55"><span class="pretng">55%</span> </span></div></div></div></div></div><div class="donet_btn"><input id="'+object.projectID+'" type="submit" value="Doneer" class="btn btn-min btn-solid"></input></div></div></div></div></div>';
document.querySelector("#showProject").innerHTML += projextX;
var valueVerwijder = document.getElementById(object.projectID);
valueVerwijder.addEventListener("click", doneerFunc);
}
});
}
laadProjectDetails();
function doneerFunc(){
console.log("test");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.