【原创】再谈动态增加行
用我以前做的一个东东,详解动态增加行技术。
function CheckSerialNum(whatid,what,retailer,curr,whse)
{ if (form1.salesman.value=="")
{
alert("先选择门店");
return;
}
if (event.keyCode==13)
{
var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
oXmlHttp.Open("POST", "qrySN.asp?serialNum="+what+"&retailer="+retailer+"&Curr="+curr+"&whse="+whse, false);
oXmlHttp.Send();
if (unescape(oXmlHttp.responseText) == "Wrong")
{
alert('没有找到!');
eval("window.form1.SerialNum"+whatid+".select()");
eval("window.form1.SerialNum"+whatid+".focus()");
}
else
{
var StrSerial
StrSerial = unescape(oXmlHttp.responseText);
var SerialNum
//alert(StrSerial);
SerialNum = StrSerial.split("*_*");
eval("window.form1.SerialNum"+whatid+".value = /""+String(SerialNum[0])+"/";");
eval("window.form1.ProductCode"+whatid+".value = /""+SerialNum[1]+"/";");
eval("window.form1.WhseLocation"+whatid+".value = /""+SerialNum[2]+"/";");
eval("window.form1.Price"+whatid+".value = /""+SerialNum[3]+"/";");
eval("window.form1.MaxPrice"+whatid+".value = /""+SerialNum[4]+"/";");
eval("window.form1.MinPrice"+whatid+".value = /""+SerialNum[5]+"/";");
eval("window.form1.ProductName"+whatid+".value = /""+SerialNum[6]+"/";");
eval("window.form1.LotTracked"+whatid+".value = /""+SerialNum[7]+"/";");
eval("window.form1.Lotlen"+whatid+".value = /""+SerialNum[8]+"/";");
eval("window.form1.SerialTracked"+whatid+".value = /""+SerialNum[9]+"/";");
eval("window.form1.Seriallen"+whatid+".value = /""+SerialNum[10]+"/";");
eval("window.form1.Vendorid"+whatid+".value = /""+SerialNum[11]+"/";");
eval("window.form1.StockType"+whatid+".value = /""+SerialNum[12]+"/";");
//动态增加行
//begin
id = whatid+1
var obj=eval("goodtr"+whatid);
var objDiv=eval("tdtr1");
var re0;
re0=/(SerialNum|ProductCode|ProductName|Qty|Price|WhseLocation|Cash|CustomerPay|Commitment|LotTracked|SerialTracked|Lotlen|Seriallen|MaxPrice|MinPrice|Vendorid|StockType|DescriptR)(/()?(')?[1-9][0-9]?(')?(/))?/g;
var re1;
re1=/>[1-9][0-9]?</;
var ModifiedHTML;
ModifiedHTML=obj.innerHTML;
ModifiedHTML=ModifiedHTML.replace(re0,"$1"+"$2"+"$3"+String(id)+"$4"+"$5");
ModifiedHTML=ModifiedHTML.replace(re1,"><");
var addHTML;
addHTML ="<table width=/"100%/"><tr id=goodtr"+String(id)+">";
addHTML = addHTML + ModifiedHTML;
addHTML = addHTML + "</tr></table>"
objDiv.insertAdjacentHTML("beforeEnd", addHTML);
eval("form1.SerialNum"+id+".value=''");
eval("form1.ProductCode"+id+".value=''");
eval("form1.ProductName"+id+".value=''");
eval("form1.Qty"+id+".value='1'");
eval("form1.Price"+id+".value=''");
eval("form1.WhseLocation"+id+".value=''");
eval("form1.Cash"+id+".value=''");
eval("form1.CustomerPay"+id+".value=''");
eval("form1.Commitment"+id+".value=''");
eval("form1.LotTracked"+id+".value=''");
eval("form1.SerialTracked"+id+".value=''");
eval("form1.Lotlen"+id+".value=''");
eval("form1.Seriallen"+id+".value=''");
eval("form1.MaxPrice"+id+".value=''");
eval("form1.MinPrice"+id+".value=''");
eval("form1.Vendorid"+id+".value=''");
eval("form1.StockType"+id+".value=''");
eval("window.form1.SerialNum"+id+".focus()");
window.form1.Maxline.value = whatid;
// 本来Maxline的值对本程序意义不大,但是由于已经有很多程序在用
// 并且,这个值在以前是固定的,现在成了变量。^_^
//end
}
}
}
这里主要分析动态增加行的技术。
在比较了很多种动态增加行或列的技术之后感觉,目前用的方法最简洁。
innerHTML只能增加表格或者<DIV></DIV>里的内容,不能动态直接增加<tr></tr>(当时,这个地方差点把我逼疯了!)
所以在即将增加的行里,可以这样设置:
<tr>
<td colspan=10 id=tdtr<%=i%>>
<table width="100%" >
<tr id=goodtr<%=i%> >
<td></td>
</tr>
</table>
</td>
</tr>
另:insertAdjacentHTML和innerHTML 第一个插入,第二个是赋值
原型:insertAdjacentHTML(swhere,stext)
参数:
swhere:指定插入html标签语句的地方,有四种值可以用:
1.beforeBegin:插入到标签开始前
2.afterBegin:插入到标签开始标记后
3.beforeEnd:插入到标签结束标记前
4.afterEnd:插入到标签结束标记后
=====================
var obj=eval("goodtr"+whatid); //首先定义一个即将插入的对象
var objDiv=eval("tdtr1"); //定义一个标签位置
var ModifiedHTML;
ModifiedHTML=obj.innerHTML; //将obj插入
ModifiedHTML=ModifiedHTML.replace(re0,"$1"+"$2"+"$3"+String(id)+"$4"+"$5");
ModifiedHTML=ModifiedHTML.replace(re1,"><"); //以上两行是格式化插入内容
var addHTML;
addHTML ="<table width=/"100%/"><tr id=goodtr"+String(id)+">";
addHTML = addHTML + ModifiedHTML;
addHTML = addHTML + "</tr></table>" //以上三行是待插入的HTML内容
objDiv.insertAdjacentHTML("beforeEnd", addHTML); //在objDiv标签处插入addHTML内容
================================
另:分析reo,re1,两个正则表达式。
var re0;
re0=/(SerialNum|ProductCode|ProductName|Qty|Price|WhseLocation|Cash|CustomerPay|Commitment|LotTracked|SerialTracked|Lotlen|Seriallen|MaxPrice|MinPrice|Vendorid|StockType|DescriptR)(/()?(')?[1-9][0-9]?(')?(/))?/g;
// 结尾的可选的g参数,这表示在每行中对所有匹配的串执行搜索(而不是缺省的只搜索第一个匹配串)。
// 结尾还可以添加 i 参数,表示忽略大小写
// [1-9][0-9]?表示匹配两位数
// [1-9][0-9]表示匹配任何位数
// /<.*>/ 和 /<(.*)>/是一样的,经常用(.)来表示句点。
// 其意义:匹配从开始的小于号 (<) 到 标记结束处的大于号之 间的所有内容。
// 如果 /<.*?>/ ,最小匹配,表示:只取出一个<h1>标记
// 通过在 '*'、 '+' 或 '?' 限定符后放置 '?',该表达式就从贪婪匹配转为了非贪婪或最小匹配
// 上面re0表示:SerialNum|ProductCode...并且后面有('num')或者(num)的全部字符串,如:SerialNum5
//
//
//
//
var re1;
re1=/>[1-9][0-9]?</;
ModifiedHTML=ModifiedHTML.replace(re0,"$1"+"$2"+"$3"+String(id)+"$4"+"$5");
ModifiedHTML=ModifiedHTML.replace(re1,"><");
-------- GAME OVER --------
用我以前做的一个东东,详解动态增加行技术。
function CheckSerialNum(whatid,what,retailer,curr,whse)
{ if (form1.salesman.value=="")
{
alert("先选择门店");
return;
}
if (event.keyCode==13)
{
var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
oXmlHttp.Open("POST", "qrySN.asp?serialNum="+what+"&retailer="+retailer+"&Curr="+curr+"&whse="+whse, false);
oXmlHttp.Send();
if (unescape(oXmlHttp.responseText) == "Wrong")
{
alert('没有找到!');
eval("window.form1.SerialNum"+whatid+".select()");
eval("window.form1.SerialNum"+whatid+".focus()");
}
else
{
var StrSerial
StrSerial = unescape(oXmlHttp.responseText);
var SerialNum
//alert(StrSerial);
SerialNum = StrSerial.split("*_*");
eval("window.form1.SerialNum"+whatid+".value = /""+String(SerialNum[0])+"/";");
eval("window.form1.ProductCode"+whatid+".value = /""+SerialNum[1]+"/";");
eval("window.form1.WhseLocation"+whatid+".value = /""+SerialNum[2]+"/";");
eval("window.form1.Price"+whatid+".value = /""+SerialNum[3]+"/";");
eval("window.form1.MaxPrice"+whatid+".value = /""+SerialNum[4]+"/";");
eval("window.form1.MinPrice"+whatid+".value = /""+SerialNum[5]+"/";");
eval("window.form1.ProductName"+whatid+".value = /""+SerialNum[6]+"/";");
eval("window.form1.LotTracked"+whatid+".value = /""+SerialNum[7]+"/";");
eval("window.form1.Lotlen"+whatid+".value = /""+SerialNum[8]+"/";");
eval("window.form1.SerialTracked"+whatid+".value = /""+SerialNum[9]+"/";");
eval("window.form1.Seriallen"+whatid+".value = /""+SerialNum[10]+"/";");
eval("window.form1.Vendorid"+whatid+".value = /""+SerialNum[11]+"/";");
eval("window.form1.StockType"+whatid+".value = /""+SerialNum[12]+"/";");
//动态增加行
//begin
id = whatid+1
var obj=eval("goodtr"+whatid);
var objDiv=eval("tdtr1");
var re0;
re0=/(SerialNum|ProductCode|ProductName|Qty|Price|WhseLocation|Cash|CustomerPay|Commitment|LotTracked|SerialTracked|Lotlen|Seriallen|MaxPrice|MinPrice|Vendorid|StockType|DescriptR)(/()?(')?[1-9][0-9]?(')?(/))?/g;
var re1;
re1=/>[1-9][0-9]?</;
var ModifiedHTML;
ModifiedHTML=obj.innerHTML;
ModifiedHTML=ModifiedHTML.replace(re0,"$1"+"$2"+"$3"+String(id)+"$4"+"$5");
ModifiedHTML=ModifiedHTML.replace(re1,"><");
var addHTML;
addHTML ="<table width=/"100%/"><tr id=goodtr"+String(id)+">";
addHTML = addHTML + ModifiedHTML;
addHTML = addHTML + "</tr></table>"
objDiv.insertAdjacentHTML("beforeEnd", addHTML);
eval("form1.SerialNum"+id+".value=''");
eval("form1.ProductCode"+id+".value=''");
eval("form1.ProductName"+id+".value=''");
eval("form1.Qty"+id+".value='1'");
eval("form1.Price"+id+".value=''");
eval("form1.WhseLocation"+id+".value=''");
eval("form1.Cash"+id+".value=''");
eval("form1.CustomerPay"+id+".value=''");
eval("form1.Commitment"+id+".value=''");
eval("form1.LotTracked"+id+".value=''");
eval("form1.SerialTracked"+id+".value=''");
eval("form1.Lotlen"+id+".value=''");
eval("form1.Seriallen"+id+".value=''");
eval("form1.MaxPrice"+id+".value=''");
eval("form1.MinPrice"+id+".value=''");
eval("form1.Vendorid"+id+".value=''");
eval("form1.StockType"+id+".value=''");
eval("window.form1.SerialNum"+id+".focus()");
window.form1.Maxline.value = whatid;
// 本来Maxline的值对本程序意义不大,但是由于已经有很多程序在用
// 并且,这个值在以前是固定的,现在成了变量。^_^
//end
}
}
}
这里主要分析动态增加行的技术。
在比较了很多种动态增加行或列的技术之后感觉,目前用的方法最简洁。
innerHTML只能增加表格或者<DIV></DIV>里的内容,不能动态直接增加<tr></tr>(当时,这个地方差点把我逼疯了!)
所以在即将增加的行里,可以这样设置:
<tr>
<td colspan=10 id=tdtr<%=i%>>
<table width="100%" >
<tr id=goodtr<%=i%> >
<td></td>
</tr>
</table>
</td>
</tr>
另:insertAdjacentHTML和innerHTML 第一个插入,第二个是赋值
原型:insertAdjacentHTML(swhere,stext)
参数:
swhere:指定插入html标签语句的地方,有四种值可以用:
1.beforeBegin:插入到标签开始前
2.afterBegin:插入到标签开始标记后
3.beforeEnd:插入到标签结束标记前
4.afterEnd:插入到标签结束标记后
=====================
var obj=eval("goodtr"+whatid); //首先定义一个即将插入的对象
var objDiv=eval("tdtr1"); //定义一个标签位置
var ModifiedHTML;
ModifiedHTML=obj.innerHTML; //将obj插入
ModifiedHTML=ModifiedHTML.replace(re0,"$1"+"$2"+"$3"+String(id)+"$4"+"$5");
ModifiedHTML=ModifiedHTML.replace(re1,"><"); //以上两行是格式化插入内容
var addHTML;
addHTML ="<table width=/"100%/"><tr id=goodtr"+String(id)+">";
addHTML = addHTML + ModifiedHTML;
addHTML = addHTML + "</tr></table>" //以上三行是待插入的HTML内容
objDiv.insertAdjacentHTML("beforeEnd", addHTML); //在objDiv标签处插入addHTML内容
================================
另:分析reo,re1,两个正则表达式。
var re0;
re0=/(SerialNum|ProductCode|ProductName|Qty|Price|WhseLocation|Cash|CustomerPay|Commitment|LotTracked|SerialTracked|Lotlen|Seriallen|MaxPrice|MinPrice|Vendorid|StockType|DescriptR)(/()?(')?[1-9][0-9]?(')?(/))?/g;
// 结尾的可选的g参数,这表示在每行中对所有匹配的串执行搜索(而不是缺省的只搜索第一个匹配串)。
// 结尾还可以添加 i 参数,表示忽略大小写
// [1-9][0-9]?表示匹配两位数
// [1-9][0-9]表示匹配任何位数
// /<.*>/ 和 /<(.*)>/是一样的,经常用(.)来表示句点。
// 其意义:匹配从开始的小于号 (<) 到 标记结束处的大于号之 间的所有内容。
// 如果 /<.*?>/ ,最小匹配,表示:只取出一个<h1>标记
// 通过在 '*'、 '+' 或 '?' 限定符后放置 '?',该表达式就从贪婪匹配转为了非贪婪或最小匹配
// 上面re0表示:SerialNum|ProductCode...并且后面有('num')或者(num)的全部字符串,如:SerialNum5
//
//
//
//
var re1;
re1=/>[1-9][0-9]?</;
ModifiedHTML=ModifiedHTML.replace(re0,"$1"+"$2"+"$3"+String(id)+"$4"+"$5");
ModifiedHTML=ModifiedHTML.replace(re1,"><");
-------- GAME OVER --------