简体   繁体   English

for循环内动态创建的按钮上的addEventListener问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM