我做一个进销存管理系统的JS脚本,这段脚本的意思是在我获取到明细单表的之后,就在获取的table中进行修改。将table中的一表格转换成了textBox,这一点已经成功,可是当我要修改的时候却始终出现'rows' 为空或不是对象的提示。
可是我明明已经获取到了table啊!
获取table的值用的是这一段脚本:
function init(){
        var tabProduct=document .getElementById ("tabProduct");
        EditTables (tabProduct);
      }
出问题的脚本代码如下:
//提取表格的值,JSON格式
     function GetTableData(table){
       var tableData=new Array();
          alert("行数:"+table.rows.length);    //出问题的就在这一行,每当我修改的时候就会出现'rows' 为空或不是对象的问题,然后就阻止我修改          for(var i=1;i<table.rows.length;i++){
            tableData.push(GetRowData(tabProduct.rows[i]));
          }
          return tableData;
     } 我将所有的脚本语言贴下:function selectBuyOrder(){
      var ual="BuyOrder_Frame.aspx";
      var result=window.showModalDialog(ual,'DialogWidth=590px,DialogHeight=500px');
      if(result!=null){
      var val =result.split(','); 
         document .getElementById ("BuyOrderID").value=val[0];
         document .getElementById ("TotalPrice").value=val[1];
      }
//      debugger;
      initload();
      init();
    }
    
    function initload()
      {
         var BuyOrderID="";
         BuyOrderID=document.getElementById("BuyOrderID").value;
         var xmlHttp=createXmlHttp();
         xmlHttp.onreadystatechange=function(){
            if (xmlHttp.readyState==4){
               document.getElementById("initSubmitInfo").innerHTML = xmlHttp.responseText;
            }
         }
//         xmlHttp.open("POST","AjaxBuyReceipt.aspx",true);
//         xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
//         xmlHttp.send("action=loadDetail&BuyOrderID="+BuyOrderID);
          xmlHttp.open("GET","AjaxBuyReceipt.aspx?BuyOrderID="+BuyOrderID,false);
        xmlHttp.send();
      }
      
      function createXmlHttp()
      {
         var xmlHttp=null;
         if(window.xmlHttpRequest){
            xmlHttp = new XMLHttpRequest();            
         }else{
           xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
         }
         return xmlHttp;         
      }
      
      function init(){
        var tabProduct=document .getElementById ("tabProduct");
        EditTables (tabProduct);
      }
      
      
      function EditTables(){
      for(var i=0;i<arguments.length;i++){
           SetTableCanEdit(arguments[i]);
        }
      }
      
      
      //设置表格是可编辑的
      function SetTableCanEdit(table){
      
         for (var i=0;i<table.rows.length;i++){
            SetRowCanEdit (table.rows[i]);
         }
      }
      function SetRowCanEdit(row){
         for (var j=0;j<row.cells.length;j++){
           //如果当前单元格指定了编辑类型,则表示允许编辑
           var editType=row.cells[j].getAttribute("EditType");
           if (!editType){
           //如果当前单元格没有指定,则查看当前列是否指定
              editType =row.parentNode.rows[0].cells[j].getAttribute("EditType");
           }
           if(editType){
             row.cells[j].onclick=function(){
                EditCell(this);
             }
           }
         }
      }
      //设置指定单元格可编辑
      function EditCell(element,editType){
         var editType=element.getAttribute("EditType");
         if(!editType){
         //如果当前单元格没有指定,则查看当前列是否指定
         editType=element.parentNode.parentNode.rows[0].cells[element.cellIndex].getAttribute("EditType");
         }
         
         switch(editType){
           case"TextBox":
           CreateTextBox(element,element.innerHTML);
           break;
           default:
           break;
         }
      }
      
      //为单元格创建可编辑输入框
      function CreateTextBox(element,value){
      //检查编辑状态,如果已经是编辑状态,跳过
      var editState=element.getAttribute("EditState");
      if(editState!="true"){
          //创建文本框
          var textBox=document .createElement("INPUT");
          textBox.type="text";
          textBox.className="EditCell_TextBox";
          
          //设置文本框当前值
          if(!value){
             value =element.getAttribute("Value");
          }
          textBox.value=value;
          
          //设置文本框的失去焦点事件
          textBox.onblur=function(){
              CancelEditCell(this.parentNode,this.value);
          }
          //向当前单元格添加文本框
          ClearChild(element);
          element.appendChild(textBox);
          textBox.focus();
          textBox.select();
          //改变状态变量
          element.setAttribute("EditState","true");
          element.parentNode.parentNode.setAttribute()
      }
      }
      
      //清空指定对象的所有子节点
      function ClearChild(element){
         element.innerHTML="";
      }
      
      //添加行
      function AddRow(table){
      var lastRow=table.rows[table.rows.length-1];
      var newRow=lastRow.cloneNode(true);
      table.tBodies[0].appendChild(newRow);
      SetRowCanEdit(newRow);
      return newRow;
      }
      
      //删除行
      function DeleteRow(table,index){
         for (var i=table.rows.length-1;i>0;i--){
            var chkOrder=table.rows[i].cells[0].firstChild;
             if (chkOrder){
                if (chkOrder.type="CHECKBOX"){
                   if (chkOrder.checked){
                     //执行删除
                     table.deleteRow(i);
                   }
                }
             }
         }
      }
      
      //取消单元格编辑状态
      function CancelEditCell(element,value,text){
         element.setAttribute("Value",value);
         if(text){
            element.innerHTML=text;
         }else{
            element.innerHTML=value;
         }
         element.setAttribute("EditState","false");
         
         
      }
     
     //提取表格的值,JSON格式
     function GetTableData(table){
       var tableData=new Array();
          alert("行数:"+table.rows.length);
          for(var i=1;i<table.rows.length;i++){
            tableData.push(GetRowData(tabProduct.rows[i]));
          }
          return tableData;
     }
     
      //提取指定行的数据,JSON格式
      function GetRowData(row){
         for(var j=0;j<row.cells.length;j++){
            name=row.parentNode.rows[0].cells[j].getAttribute("Name");
            if(name){
               var value=row.cells[j].getAttribute("Value");
               if(!value){
                  value=row.cells[j].innerHTML;
               }
               rowData[name]=value;
            }
         }
         //alert("ProductName:"+rowData.ProductName);
         //或者这样:alert("ProductName:"+rowData["ProductName"]);
         return rowData;
      }
      //检查当前数据行中需要运行的字段
      function CheckExpression(row){
         for(var j=0;j<row.cells.length;j++){
            expn=row.parentNode.rows[0].cells[j].getAttribute("Expression");
            //如指定了公式则要求计算
            if (expn){
               var result=Expression(row,expn);
               var format=row.parentNode.rows[0].cells[j].getAttribute("Format");
               if (format){
                   //如指定了格式,进行字值格式化
                   row.cells[j].innerHTML=formatNmber(Expression(row,expn),format);
               }
               else{
                   row.cells[j].innerHTML=Expression(row,expn);
               }
            }
         }
      }
      function formatNmber(num,pattern){
         var strarr=num?num.toString().split('.'):['0'];
         var fmtarr=pattern?pattern.split('.'):[''];
         var retstr='';
         
         //整数部分
      var str=strarr[0];
      var fmt=fmtarr[0];
      var i=str.length-1;
      var comma=false;
      for(var f=fmt.length-1;f>=0;f--){
           switch(fmt.substr(f,1)){
               case'#':
                if(i>=0) retstr=str.substr(i--,1)+retstr;
                break;
               case'0':
                if(i>=0) retstr=str.substr(i--,1)+retstr;
                else retstr='0'+retstr;
                break;
               case',':
                comma =true;
                retstr=','+retstr;
                break;
           }
      }
      if (i>=0){
         if(comma){
            var l=str.length;
            for(;i>=0;i--){
               retstr=str.substr(i,1)+retstr;
               if(i>0 && ((l-i)%3)==0)  retstr=','+retstr;
            }
         }
         else{
            retstr=str.substr(0,i+1)+retstr;
         }
      }
      retstr=retstr+'.';
      //处理小数部分
      str=strarr.length>1?strarr[1]:'';
      fmt=fmtarr.length>1?fmt[1]:'';
      i=0;
      for(var f=0;f<fmt.length;f++){
         switch(fmt.substr(f,1)){
            case'#':
              if(i<str.length)  retstr+=str.substr(i++,1);
              break;
            case '0':
              if(i<str.length) retstr+=str.substr(i++,1);
              else retstr+='0';
              break;
         }
      }
      return retstr.replace(/^,+/,'').replace(/\.$/,'');
      }
      
      
      function Expression(row,expn){
        var rowData=GetRowData(row);
        for(var j=0;j<row.cells.length;j++){
           name=row.parentNode.rows[0].cells[j].getAttribute("Name");
           if(name){
             var reg=new RegExp(name,"i");
             expn=expn.replace(reg,rowData[name].replace(/\,/g,""));
           }
        }
        return eval(expn);
      }