2017-06-18 5 views
0

はあなたが私はいくつかの理由のため、以下のjavascripttable.removeRow()はテーブルを 'リセット'しても機能しなくなりますか?

var table = document.getElementById('myTable'); 
var form = document.getElementById('myForm'); 
var formSave = form.innerHTML; 

function remove(rowID) 
{ 
    table.deleteRow(rowID); 
} 

function reset() 
{ 
    form.innerHTML = formSave; 
} 

を持って

<form id="myForm"> 
<table id="myTable"> 
    <tr> 
     <th>One</th> 
     <th>Two</th> 
     <th>Three</th> 

    </tr> 

    <tr> 
     <td>Alpha</td> 
     <td>Bravo</td> 
     <td><a href="javascript:remove(1)">X</a></td> 
    </tr> 

    <tr> 
     <td>Charlie</td> 
     <td>Delta</td> 
     <td><a href="javascript:remove(2)">X</a></td> 
    </tr> 

    <tr> 
     <td>Echo</td> 
     <td>Foxtrot</td> 
     <td><a href="javascript:remove(3)">X</a></td> 
    </tr> 
</table> 
</form> 
<a href="javascript:reset()">Reset</a> 

のHTMLテーブルがあるとし、remove()機能が正常に動作しますが、reset()機能を使用した後、それはもはや作品。誰が私にこの理由が教えてもらえますか?

+0

を助けたようにのような...

var table = document.getElementById('myTable'); var form = document.getElementById('myForm'); var formSave = form.innerHTML; function remove(rowID) { table.deleteRow(rowID); } function reset() { form.innerHTML = formSave; /* re-acquire 'new' (inserted) table */ table = document.getElementById('myTable'); } 

希望、リセット機能の再取得の要素によってこの問題を解決することができます関数が呼び出されますさえしていますか? – toddmo

+0

イベントの委任と関係があります。[link1](https://davidwalsh.name/event-delegate)、[link2](https://learn.jquery.com/events/event-delegation/)、[link3] (https://stackoverflow.com/a/1688293/3407923)(jQueryリンクは依然として原則を理解するのに役立つかもしれません)。または単にgoogle "js event delegation"を参照して、どのサイトがそれを最もよく説明しているかを確認してください。 – myfunkyside

+0

'table.deleteRow(rowID);'を 'document.getElementById( 'myTable')。deleteRow(rowID);に変更してください。リセットを呼び出すとおそらく動作します。 – myfunkyside

答えて

0

var tableはライブ 'Element object'です。このプロパティは、行を削除するたびに更新されます。 reset()関数を展開するときまでに、var tableは、復元されたHTMLよりも小さい子を参照します。コンソールを開くと、後で "X"にバインドされた関数の使用時に索引付けエラーが表示されます。

あなたは:)

関連する問題