2012-01-27 153 views
3

我想知道是否有人可以幫助我。動態添加和刪除表格行

使用一些示例我發現我已經修改了一些代碼,如下所示,它允許用戶添加和刪除表格行。

JavaScript代碼

function addRow(addimagetable) { 
    var table = document.getElementById(addimagetable); 
    var rowCount = table.rows.length; 
    var row = table.insertRow(rowCount); 
    var cell1 = row.insertCell(0); 
    var element1 = document.createElement("input"); 
    element1.type = "radio"; 
    cell1.appendChild(element1); 
    var cell2 = row.insertCell(1); 
    var element2 = document.createElement("input"); 
    element2.type = "text"; 
    cell2.appendChild(element2); 
    var cell3 = row.insertCell(2); 
    var element3 = document.createElement("input"); 
    element3.type = "file"; 
    cell3.appendChild(element3); 
    } 
    function deleteRow(addimagetable) { 
    try { 
    var table = document.getElementById(addimagetable); 
    var rowCount = table.rows.length; 
    for(var i=0; i<rowCount; i++) { 
    var row = table.rows[i]; 
    var radio = row.cells[0].childNodes[0]; 
    if(null != radio && true == radio.checked) { 
    table.deleteRow(i); 
    rowCount--; 
    i--; 
    } 
    } 
    }catch(e) { 
    alert(e); 
    } 
    } 

HTML表

<input type="button" value="Add Row" onclick="addRow('addimagetable')" /> <input type="button" value="Delete Row" onclick="deleteRow('addimagetable')" /> 
       <table id="addimagetable" width="407" border="1"> 
       <tr><td width="20"><input type="radio" name="radio"/></td> 
        <td width="147"><input type="text" name="title" /></td> 
        <td width="218"><input type="file" name="image" /></td> 
       </tr> 

      </table> 
      </div> 

正如你從上表上面的代碼,該行要麼添加或通過一個按鈕來刪除看到 '點擊'。我一直在努力解決的是如何擺脫'添加'按鈕,而不是用一個函數替換它,如果一行中的數據在單元格'2'和'3'中創建,則創建一個新行。

我一直在這個工作了一段時間,我似乎無法找到一種方法來得到這個工作。

我只是想知道是否有人能夠幫助我,並告訴我我要出錯的地方。

非常感謝

+2

**在計算器隨時搜索,有很多的解決方案...... **當我搜索了'添加刪除錶行[html]',我得到了這個... http://stackoverflow.com/search?q=Add+Delete+Table+Row+ [html]&submit = search ...檢查這個鏈接... – 2012-01-27 15:46:21

+0

嗨,是的,你'是對的,這是我在發佈我的問題之前做的第一件事,但不幸的是我無法找到答案來幫助我解決特定的問題。親切的問候 – IRHM 2012-01-27 16:05:26

+0

使用那裏的邏輯...什麼是不工作在你的代碼然後?請解釋一下, – 2012-01-27 16:07:04

回答

0

我發現你的問題,我試圖整理出類似的問題。我用你的案例(因爲它比我的簡單)來解決這個問題......我認爲與你分享結果是公平的。

下面的代碼檢查每次的每行中你的兩個監視的輸入中的一個失去焦點 - 如果該行既監測輸入具有值(與該行沒有造成圖還要產生附加行),則新的行添加到下面。

HTML:

 <input type="button" value="Add Row" onclick="addRow('addimagetable')" /> 
    <input type="button" value="Delete Row" onclick="deleteRow('addimagetable')" /> 
    <table id="addimagetable" width="407" border="1"> 
     <tr> 
      <td width="20"><input type="radio" name="radio"/></td> 
      <td width="147"><input type="text" name="title" onblur="check(1)" /></td> 
      <td width="218"><input type="file" name="image" onblur="check(1)" /></td> 
     </tr> 
    </table> 

腳本:

<script> 
var numrows = 1; // because you are starting with 1 row visible 
var rowsarray = ["0", "0"]; 
function addRow(addimagetable) { 
    numrows = numrows + 1; 
    rowsarray[numrows] = "0"; 
    var table = document.getElementById(addimagetable); 
    var rowCount = table.rows.length; 
    var row = table.insertRow(rowCount); 
    var cell1 = row.insertCell(0); 
    var element1 = document.createElement("input"); 
    element1.type = "radio"; 
    cell1.appendChild(element1); 
    var cell2 = row.insertCell(1); 
    var element2 = document.createElement("input"); 
    element2.type = "text"; 
    cell2.appendChild(element2); 
    element2 = cell2.getElementsByTagName("input")[0]; 
    element2.setAttribute("onblur","check("+numrows+")"); 
    var cell3 = row.insertCell(2); 
    var element3 = document.createElement("input"); 
    element3.type = "file"; 
    cell3.appendChild(element3); 
    element3 = cell3.getElementsByTagName("input")[0]; 
    element3.setAttribute("onblur","check("+numrows+")"); 
    } 
    function deleteRow(addimagetable) { 
    try { 
    var table = document.getElementById(addimagetable); 
    var rowCount = table.rows.length; 
    for(var i=0; i<rowCount; i++) { 
    var row = table.rows[i]; 
    var radio = row.cells[0].childNodes[0]; 
    if(null != radio && true == radio.checked) { 
    table.deleteRow(i); 
    rowCount--; 
    i--; 
    } 
    } 
    }catch(e) { 
    alert(e); 
    } 


} 
     function check(num) { 
      table = document.getElementById('addimagetable'); 
      row = table.getElementsByTagName("tr")[num-1]; 
      c1 = row.getElementsByTagName("td")[1].getElementsByTagName('input')[0].value; 
      c2 = row.getElementsByTagName("td")[2].getElementsByTagName('input')[0].value; 
      if ((c1 !== "") && (c1 !== null) && (c2 !== "") && (c2 !== null) && (rowsarray[num] !== 1)) { addRow('addimagetable'); rowsarray[num] = 1; } 
     } 
     </script>