首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用innerHTML时无法读取null的属性“”addEventListener“”

使用innerHTML时无法读取null的属性“”addEventListener“”
EN

Stack Overflow用户
提问于 2019-06-27 07:50:28
回答 3查看 49关注 0票数 1

我正在使用innerHTML在其上添加一些元素和包装器

代码语言:javascript
复制
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行时,我得到

使用innerHTML时,

无法读取null的属性“”addEventListener“”

这是因为我正在使用innerHTML创建元素吗?

EN

回答 3

Stack Overflow用户

发布于 2019-06-27 10:00:02

问题是querySelector只返回类为.wrapper的第一个元素

应该使用querySelectorAll()返回一个.wrappers数组,并使用for循环遍历以放置事件侦听器。

或者,您可以使用一种称为事件委派的技术,将事件侦听器放在父对象上,并使用event.target来引用所单击的子对象。

票数 1
EN

Stack Overflow用户

发布于 2019-06-27 13:24:55

好吧,我仍然不确定是什么导致了这个问题。但我将上面的代码更改为类似以下内容:

代码语言:javascript
复制
$(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。我只需要弄清楚如何从标签内部检索到这个值。

票数 0
EN

Stack Overflow用户

发布于 2019-06-27 13:43:23

首先,您有多个.wrapper,所以当您执行var d=document.querySelector('.wrapper')时,您总是只获得第一个创建的wrapper

您将需要当前创建的包装器。这就是你应该做的,看看下面。

代码语言:javascript
复制
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();

            });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56782256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档