如何将事件侦听器分配给我在Javascript中的forEach循环中创建的每个链接

如何将事件侦听器分配给我在Javascript中的forEach循环中创建的每个链接,javascript,python,Javascript,Python,我正在使用forEach循环并根据条件创建链接。但是,我面临的问题是,事件侦听器仅添加到最后一项。我知道以前有人问过这个问题,我知道问题的原因是吊装,我应该使用闭包。我曾尝试过这样做,但我认为我做得不对。我真的很感激任何帮助,因为我有点困了。下面是我代码中的一些片段(出于提问的目的,我已经从代码中删除了一些片段): 功能编辑(post,post\u id){ 警报(post_id); } 功能加载(事件){ fetch(`/posts?start=${start}&end=${end}`) .t

我正在使用forEach循环并根据条件创建链接。但是,我面临的问题是,事件侦听器仅添加到最后一项。我知道以前有人问过这个问题,我知道问题的原因是吊装,我应该使用闭包。我曾尝试过这样做,但我认为我做得不对。我真的很感激任何帮助,因为我有点困了。下面是我代码中的一些片段(出于提问的目的,我已经从代码中删除了一些片段):

功能编辑(post,post\u id){
警报(post_id);
}
功能加载(事件){
fetch(`/posts?start=${start}&end=${end}`)
.then(response=>response.json())
。然后(数据=>{
document.querySelector(“#posts”).innerHTML=“”;
设c=0;
data.forEach(i=>{
如果(c==data.length-1){
返回;
};
document.querySelector(“#posts”).innerHTML+=``
让当前用户=document.getElementById(“登录”).innerHTML;
document.querySelector(“#posts”).innerHTML+=`
`;
if(i.user\u id==parseInt(当前用户)){
let element=document.createElement('a');
element.innerHTML=“编辑”;
setAttribute('data-id',`${i.id}`);
setAttribute('data-post',`${i.id}`);
element.setAttribute('href',`${i.id}`);
元素。addEventListener('click',function()
{edit(this.dataset.id,this.dataset.post);});
控制台日志(元素);
document.querySelector(`border${i.id}').append(元素);
};
}
C++;
});});

分配给元素的
innerHTML
将损坏其子元素的任何现有侦听器:

document.querySelector('button')。addEventListener('click',()=>{
console.log('clicked');
});
container.innerHTML+='';
//单击“侦听器”现在不再工作

点击

非常感谢您!!这就解决了问题,我只是删除了下面的行data.slice(0,data.length-1).forEach((I,index)=>{。我显然看错了方向。
    function edit(post, post_id){

    alert(post_id);

    }
function load_posts(event) {
    fetch(`/posts?start=${start}&end=${end}`)
    .then(response => response.json())
    .then(data => {
        
        document.querySelector('#posts').innerHTML = "<div></div>";
        
        let c = 0;
        data.forEach(i => {
            if (c === data.length - 1){ 
                return; 
                };
            document.querySelector('#posts').innerHTML += `<div class = 'border' >`

            let current_user = document.getElementById("logged_in").innerHTML;

            document.querySelector('#posts').innerHTML += `<div class="row" ><div class="col-2" 
            id = border${i.id}></div>
            </div></div>`;
            if (i.user_id === parseInt(current_user)){
                let element = document.createElement('a');
                element.innerHTML = "Edit";
                element.setAttribute('data-id', `${i.id}`);
                element.setAttribute('data-post', `${i.id}`);
                element.setAttribute('href', `#${i.id}`);
                element.addEventListener('click', function() 
                {edit(this.dataset.id,this.dataset.post);});
                console.log(element);
                document.querySelector(`#border${i.id}`).append(element);
                };
        }
        c++;
    });});