我正在使用innerHTML在其顶部添加一些元素和包装器
for (i = 0; i < arr.length; i++) {
b.innerHTML += "<div class='wrapper'><div class='col-4'>" + arr[i].storeID + "</div>" +
"<div class='col-4'>" + arr[i].Bookid + "</div>" +
"<div class='col-4'>" + arr[i].StoreName + "</div>" + "</div>"
var d=document.querySelector('.wrapper')
d.addEventListener("click", function(e) {
console.log('on click fired')
/*insert the value for the autocomplete text field:*/
inpStr=this.innerHTML
inp.value = this.innerHTML
/*close the list of autocompleted values,
(or any other open lists of autocompleted values:*/
closeAllLists();
});
}
innerHTML
正常工作,但是当我单击wrapper
行时,我得到了
使用时无法读取null的属性'addEventListener' innerHTML
这是因为我正在使用innerHTML创建元素吗?
答案 0 :(得分:1)
问题是querySelector仅返回类.wrapper的第一个元素
querySelectorAll()应该用于返回.wrappers数组,并使用for循环进行迭代以放置事件侦听器。
或者,您可以使用一种称为事件委托的技术,将事件侦听器放置在父级上,并使用event.target来引用被单击的子级。
答案 1 :(得分:0)
嗯,我仍然不确定是什么引起了问题。但是我将上面的代码更改为:
$(b).on('click','#wrapper',function(){
console.log('on click fired')
/*insert the value for the autocomplete text field:*/
inpStr=this.innerHTML
inp.value = this.innerHTML
/*close the list of autocompleted values,
(or any other open lists of autocompleted values:*/
closeAllLists();
})
,它给了我正确的innerhtml。我只需要弄清楚如何从标记中检索正确的值。
答案 2 :(得分:0)
首先您有一个.wrapper
,所以执行wrapper
时总是只得到第一个创建的var d=document.querySelector('.wrapper')
您将需要当前创建的包装器。 这是您应该在下面查看的内容。
var d= document.createElement("div") // Create a new div
b.append(d); // append the new Created div to b
d.className = "wrapper";
d.innerHTML = "<div class='col-4'>" + arr[i].storeID + "</div>" +
"<div class='col-4'>" + arr[i].Bookid + "</div>" +
"<div class='col-4'>" + arr[i].StoreName + "</div>";
// Add your click operation
d.addEventListener("click", function(e) {
console.log('on click fired')
/*insert the value for the autocomplete text field:*/
inpStr=this.innerHTML
inp.value = this.innerHTML
/*close the list of autocompleted values,
(or any other open lists of autocompleted values:*/
closeAllLists();
});