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