2016-10-31 4 views
-1

の `parentNode`プロパティを読み取ることができません:は、私は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]

私がクリックした場合、[msgbutton]ハロー行に、それは次のようになります。

goodbye [msgbutton]

これまでのところ、この:this.parentNode.parentNode.remove();が戻っています未定義。

EDIT:

は、私はあなたは「messageUser」機能ではなく、HTML要素を保持するオブジェクトを呼び出すようにしようとしている()配列

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

オブジェクト「テーブル」を返す前に、上記の機能を置くことができることを再現するように見えることはできません - > https://jsfiddle.net/1nhm2c4k/ – adeneo

+0

@adeneo含まれるように編集をしました –

+0

から 'obj.makeHTMLMatchesTable'と' obj.fetchMatches'を表示できますか? – Hydro

答えて

0

を返す以前の約束 this.fetchMatchesでthis.retrieveMatches()を呼び出します。たとえば :

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); 
} 

あなたは

関連する問題