2013-01-04 131 views
2

我有一個簡單的腳本,將表格行復制到全局JavaScript變量(我知道在JavaScript中使用全局變量並不是一個好主意,但這僅用於開發)和在「onClick」事件中插入行的副本的函數。Javascript和DOM - insertBefore只能執行一次

它執行並插入一行。問題是它只會插入一行ONCE。

下面是一個示例表

<table id="myTable"> 
    <tbody> 
     <tr id="copyRow"> 
      <td>Sample Cell</td> 
     </tr> 
     <tr> 
      <td><a href="javascript:void();" onClick="insertRow(copy_row, this.parentNode.parentNode.parentNode)">Insert Row</a></td> 
     </tr> 
    </tbody> 
</table> 

這裏是我的JavaScript示例:

<script type="text/javascript"> 
    copy_row = document.getElementByID('copyRow').cloneNode(true); //Runs when page first runs 

    function insertRow(insertRow, insertBeforeMe){ 
    insertBeforeMe.parentNode.insertBefore(insertRow, insertBeforeMe) 
    } 
</script> 

我很爲難

回答

1

每次調用insertRow函數時都應克隆節點,以便獲取元素的新副本,而不是回收一個克隆的行。

copy_row = document.getElementByID('copyRow'); //Runs when page first runs 

function insertRow(insertRow, insertBeforeMe){ 
insertBeforeMe.parentNode.insertBefore(insertRow.cloneNode(true), insertBeforeMe) 
} 
+0

修好了!謝謝。你知道爲什麼回收對象會導致腳本失敗嗎? –

+0

不客氣。我認爲回收(再次插入相同的元素)將實際上從當前父元素中移除該元素,並將其再次插入到不同的地方(或者可能到完全相同的地方,就您的情況而言)。它不會被自動複製/複製,因此您一直處理(移除和插入)相同的單個元素實例。您需要在適當的地方創建新的行/元素。 – yaku

+0

啊!這很有道理。謝謝。 –

0

它甚至不應該運行一次。 JavaScript是大小寫敏感的,所以你必須使用:

document.getElementById 

document.getElementByID 

這是我working version of your script