gpt4 book ai didi

javascript - 无法读取未定义的属性 `parentNode`

转载 作者:行者123 更新时间:2023-12-03 05:45:38 26 4
gpt4 key购买 nike

我有一个创建 HTML 表格的函数:

makeHTMLTable: function(array){
var table = document.createElement('table');
for (var i = 0; i < array.length; i++) {
var row = document.createElement('tr');
var cell = document.createElement('td');
cell.textContent = array[i];
row.appendChild(cell);
cell = document.createElement('td');
var msgButton = document.createElement('button');
msgButton.setAttribute("id", "msgButton" +i);
msgButton.textContent = "message";
msgButton.addEventListener("click", this.messageUser, false);
cell.appendChild(msgButton)
row.appendChild(cell);
table.appendChild(row);
}
return table;
},

然后我有这个功能:

messageUser: function(){
debugger;
this.parentNode.parentNode.remove();
unMatch();
},

当我单击 msgbutton 时,我希望它删除整行,包括按钮本身和返回的一点文本。即:

你好[msgbutton]

再见[msgbutton]

如果我单击 hello 行上的 [msgbutton],它将如下所示:

再见[msgbutton]

但到目前为止:this.parentNode.parentNode.remove(); 返回未定义..

编辑:

我在之前的 promise 中调用了 this.retrieveMatches()this.fetchMatches() 返回一个数组

  retrieveMatches: function(){
var tableResult = this.makeHTMLMatchesTable(this.fetchMatches(object));
var matches = document.getElementById('matches')
matches.parentNode.insertBefore(tableResult, matches);
},

最佳答案

您正在尝试调用包含“messageUser”函​​数的对象,而不是 HTML 元素。例如:

var obj = {
notify: function(msg){
alert(msg);
},
messageUser: function(){
this.notify("some message"); //This line will call obj.notify()
this.parentNode.parentNode.remove(); //obj is not a HTML element, therefore it will create an error
}
}

由于您要在循环中添加事件监听器,因此需要创建一个绑定(bind)事件监听器的函数。

function bindEvent(button){
button.addEventListener("click", function(){
this.parentNode.parentNode.remove(); //"this" refer to the "button" object
}, false);
}

您可以在返回对象“table”之前放置上面的函数

关于javascript - 无法读取未定义的属性 `parentNode`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40339228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com