我想通过几个按钮实现动态添加,删除表行.然后把其中输入的值取出来.但是取值的时候他老是报错.
错误:'rows[...].cells[...].childNodes' 为空或不是对象  <body>
  <table   border=1   id="tbl" align="center">   
    
  </table>   
  <!-- 这是两个按钮作用分别是添加和删除 -->
  <table align="center">
  <tr>
  <td>  <input   type="button"   value="添加一条新的货物记录"   onclick="addRow()"> </td>
  <td>  <input   type="button"   value="删除一条新的货物记录"   onclick="deleteRow()"></td>
  <td>  <input   type="button"   value="保存货物记录"   onclick="save()"></td>
  </tr>
  </table>
  </body>
  <script language="javascript">
<!--
  var   tb1=document.getElementById('tbl')   
  function   save(o){
  var   tb1=document.getElementById('tbl');   for(var i=0;i<tb1.rows.length;i++){
   var message = "";
  for(var j=0;j<4;j++){
      message += tb1.rows[i].cells[j].childNodes[0].value;   } 
   alert(message);
   }
  return;
  }
 
  function   del(o){   
  var   tb1=document.getElementById('tbl')   
  if(tbl.rows.length   ==1) {  
  alert("您至少应该有一条货物记录");
  return
  } 
  tb1.deleteRow(o.parentNode.parentNode.rowIndex)   
  }  function   addRow(){   
  
  <!-- 定义一个newTr对象,他是tb1的新差入的行,并有一个newTd对象在其内部 -->  
  var   newTr=tbl.insertRow(),newTd
  var   text="<input   type='text' id ='f' name='f'>";
  var   cc="<input   type='button'   value='删除此条货物记录'   name='B'   onclick='del(this)'>";
  <!-- 添加单元格 -->     
   var tbody=tb1.childNodes[0];
tbody.appendChild(tbody);
  var newTr,newTd;
  var i,colnum=5;
  
  newTr=document.createElement("tr");
  tbody.appendChild(newTr);
  
  for(i=0;i<colnum;i++)
{
newTd=document.createElement("TD");
newTr.appendChild(newTd);
newTd.innerHTML=text;
if(i==4){
 newTd.innerHTML=cc;  
}  
}
  }   
  <!-- 删除行 -->  
  function   deleteRow(){ 
  <!-- 如果此时的tb1对象的rows长度不为0,就执行table对象的一个删除末尾行的方法,此行的行号为last=length-1 -->  
  if(tbl.rows.length   ==1) {  
  alert("您至少应该有一条货物记录");
  return
  }   
  tbl.deleteRow(tbl.rows.length   -   1)   
  }//-->
</script>

解决方案 »

  1.   

    function save(o){
        var tb1=document.getElementById('tbl');
        var l = tb1.rows.length;
        for(var i = 1;i < l;i += 2){ //i++ ======>>> i += 2
            var message = "";
            for(var j = 0;j < 4;j++){
                message += tb1.rows[i].cells[j].childNodes[0].value;        }
            alert(message);
        }
        return;
    }
      

  2.   

    function   addRow()有问题,每次多增加了<TR>,所以你的Table实际行数,是你看见的2倍
    var   newTr=tbl.insertRow()
    newTr=document.createElement("tr");
    这两句重复
      

  3.   

    谢谢,楼上的两位兄弟了.
    CSDN的兄弟真是够热心了.