2013-10-07 61 views
0

我想下面的代碼;JavaScript:動態刪除行操作錯誤

爲什麼deleteRow()當我們第一次點擊刪除按鈕(或刪除行)時不會提示「hi」?令人驚訝的是,它會第二次完美地工作。

HTML

<div style="height: 190px;overflow: auto;left:220px;width:710px;" id="filterTable"> 
      <table id="filterTableBody" style="border-collapse: collapse; border: 1px solid black;width:690px;" border="1"> 
       <tbody><tr bgcolor="#FF6600"> 
      <td><strong> 
        and/or&nbsp;&nbsp;&nbsp; 
       </strong></td> 
       <td><strong> 
        Column Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
       </strong></td> 
       <td><strong> 
        operator&nbsp;&nbsp;&nbsp; 
       </strong></td> 
       <td><strong> 
        Filter&nbsp;&nbsp;&nbsp; 
       </strong></td> 

       <td><strong> 
        Delete&nbsp;&nbsp;&nbsp; 
       </strong></td> 
      </tr> 
      <tr><td>&nbsp;</td><td>WORKGROUP_NAME</td><td>!=</td><td>ABDEL HAMEID</td><td><a href="javascript:deleteRow()"><img src="/images/delete.gif"></a></td></tr></tbody></table> 
      </div> 

的Javascript

function deleteRow(){ 
     var table = document.getElementById('filterTableBody'); 
     var rows1 = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr'); 
     for (var i = 0; i < rows1.length; i++) { 
      rows1[i].onclick = (function() { 
      alert("hi"); 
       table.deleteRow(this.rowIndex); 
       var oTable = document.getElementById('filterTableBody'); 

      //gets rows of table 
      var rowLength = oTable.rows.length; 
      for (i = 1; i < rowLength; i++){ 

        var oCells = oTable.rows.item(i).cells; 
        //gets cells of current row 
        var cellLength = oCells.length-1; 
         for(var j = 0; j < cellLength; j++){ 
          oCells.item(j).innerHTML = ""; 
          break; 
         } 
         break; 
      } 
     }); 
    } 

} 

爲什麼沒有在第一點擊運行的代碼,以及爲什麼它運行在第二個?

回答

0

此代碼對我的作品。謝謝@harry指出問題。

function deleteRowUI(btndel) { 
      var table=document.getElementById('filterTableBody'); 
      if (typeof(btndel) == "object") { 
       p=btndel.parentNode.parentNode; 
       p.parentNode.removeChild(p); 
       var oTable = document.getElementById('filterTableBody'); 

       //gets rows of table 
       var rowLength = oTable.rows.length; 
       for (var i = 1; i < rowLength; i++){ 

         var oCells = oTable.rows.item(i).cells; 
        //gets cells of current row 
        var cellLength = oCells.length-1; 
         for(var j = 0; j < cellLength; j++){ 
          oCells.item(j).innerHTML = ""; 
          break; 
         } 
         break; 
      } 
     } else { 
      return false; 
     } 
    } 
+0

好,你已經設法解決它的隊友。將答案標記爲已接受。另外,我不認爲你需要將'document.getElementById('filterTableBody')'變成兩個單獨的變量。一個應該足夠了(刪除'var table',因爲它是未使用的):) – Harry

1

原因是因爲只有在第一次單擊刪除按鈕時纔會附加行的onclick事件處理程序。

他們必須附加onload本身。你可以像下面:

window.onload = deleteRow; 

Demo Fiddle

+0

Firebug是給下面的錯誤
類型錯誤:行[i]是未定義 \t 行[I] .onclick =(函數(){ – atom217

+0

這是否錯誤,您加入後'window.onload'發生的呢?你是否對給定的代碼進行了其他更改?你能告訴我你當前更新的代碼嗎?因爲代碼應該可以工作(在小提琴演示中可以看到) – Harry

+0

因爲我正在對話框上工作,它也動態創建我無法使用window.onload = deleteRow;(這是最好的,如果你的表存在onLoad事件)雖然我試過但它不會工作 – atom217