我做一个进销存管理系统的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);
}
可是我明明已经获取到了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);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货