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

时间:2016-10-31 09:11:44

标签: javascript reactjs removechild parent-node

我有一个创建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时,我希望它能删除整行,包括按钮本身和返回的一点点文本。 即:

hello [msgbutton]

goodbye [msgbutton]

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

goodbye [msgbutton]

但到目前为止:this.parentNode.parentNode.remove();正在返回undefined ..

编辑:

我在之前的承诺中呼叫this.retrieveMatches() this.fetchMatches()返回一个数组

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

1 个答案:

答案 0 :(得分:0)

你试图调用持有&#34; messageUser&#34;的对象。函数,而不是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
    }
}

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

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

您可以在返回对象&#34; table&#34;

之前放置上述功能