Javascript 为什么这个addEventListener不适用于我创建的li元素?
我尝试实现一个aotocomplete输入。我想当用户单击新添加的li元素时,输入值将是li元素的值。但是,此addEventListener似乎不适用于此函数。我可以知道为什么吗?我认为每个新的li元素在我添加事件侦听器之前都创建了它们Javascript 为什么这个addEventListener不适用于我创建的li元素?,javascript,addeventlistener,Javascript,Addeventlistener,我尝试实现一个aotocomplete输入。我想当用户单击新添加的li元素时,输入值将是li元素的值。但是,此addEventListener似乎不适用于此函数。我可以知道为什么吗?我认为每个新的li元素在我添加事件侦听器之前都创建了它们 function displayMatches(matchesArr) { var newLi; for (let j of matchesArr) { newLi = document.createElement('li'); new
function displayMatches(matchesArr) {
var newLi;
for (let j of matchesArr) {
newLi = document.createElement('li');
newLi.innerHTML = `<li id="${j.replace(/\s/g,'')}">${j}</li>`;
autoResults.innerHTML += newLi.innerHTML;
document.getElementById(j.replace(/\s/g, '')).addEventListener("click",
function(e) {
alert("Hello World!");
})
}
}
要添加到DOM中的
li
与newLi
不同。分配给.innerHTML
时,您正在创建一个全新的元素。您还正在销毁和重新创建autoResults
中的所有旧元素。当您分配给.innerHTML
时,它从头开始解析HTML文本,创建所有新元素;在旧元素上设置的任何属性(如事件侦听器)都将丢失
添加元素本身,而不是指定给.innerHTML
函数显示匹配项(matchesArr){
var newLi;
对于(让j表示匹配){
newLi=document.createElement('li');
newLi.id=j.replace(/\s/g');
newLi.innerHTML=j;
newLi.addEventListener(“单击”,
职能(e){
警报(“你好,世界!”);
});
自动结果:appendChild(newLi);
}
}
要添加到DOM中的li
与newLi
不同。分配给.innerHTML
时,您正在创建一个全新的元素。您还正在销毁和重新创建autoResults
中的所有旧元素。当您分配给.innerHTML
时,它从头开始解析HTML文本,创建所有新元素;在旧元素上设置的任何属性(如事件侦听器)都将丢失
添加元素本身,而不是指定给.innerHTML
函数显示匹配项(matchesArr){
var newLi;
对于(让j表示匹配){
newLi=document.createElement('li');
newLi.id=j.replace(/\s/g');
newLi.innerHTML=j;
newLi.addEventListener(“单击”,
职能(e){
警报(“你好,世界!”);
});
自动结果:appendChild(newLi);
}
}
你真的想把一个李放在另一个李里面吗?@Ying我删除了我的答案,因为它不正确。祝你好运你好否我想将li添加到已在html中的ul中newLi.addEventListener("click",
function(e) {
alert("Hello World!");
})