for(var i=0; i<form1.elements.length; i++)
{
var e=form1.elements[i];
if(!e || e.type.toUpperCase()!="CHECKBOX" || !e.checked)
continue;
switch(e.name.toUpperCase())
{
case "QUERY" : ...
case "TS" : ...
...
}
}
{
var e=form1.elements[i];
if(!e || e.type.toUpperCase()!="CHECKBOX" || !e.checked)
continue;
switch(e.name.toUpperCase())
{
case "QUERY" : ...
case "TS" : ...
...
}
}
你这样试试,速度快多了.
document.all["query"+i].
用表单名
ALL要遍历全部元素
document.form1.query[i].checked
这样也可以
1. window.document.Form1.children['query'+i]
2. window.document.getElementById('query'+i)
3.
var arrayControl=window.document.getElementsByTagName('input');
for(var i=0;i<arrayControl.length;i++)
{
if(arrayControl.item(i).type=='checkbox' && arrayControl.item(i).checked)
{
alert(arrayControl.item(i).id);
}
}
1. window.document.Form1.children['query'+i]
2. window.document.getElementById('query'+i)
3.
var arrayControl=window.document.getElementsByTagName('input');
for(var i=0;i<arrayControl.length;i++)
{
if(arrayControl.item(i).type=='checkbox' && arrayControl.item(i).checked)
{
}
}
eval("document.all.query"+i).checked
--->>>
document.all("query"+i).checked这样的话,就有点错怪eval了,
eval虽说有点慢,但它不是慢的主要原因。
作了以上的改动后,可能会快一点,但应该不会快很多。
document.formName("query"+i)可能会更快一点,但也应该不会快很多。
根本问题在于你在循环里对象调用层次太深
document.formName("query"+i)这个也有三层,先得到window.document,再得到formObj,再得到queryI,
当然会很慢。
初步测试结果是:2000笔记录,花时间为10秒<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>New Page 1</title>
</head><body>
<form name=frm>
<input type=button value=OK onclick="okFun()"> <table border="1" >
<tr>
<td colspan=4>多选</td>
<td rowspan=2>多选结果</td>
</tr>
<tr>
<td >A</td>
<td >B</td>
<td >C</td>
<td >D</td>
</tr>
<tr>
<td ><input type=checkbox name=query0 id=queryBox value=1 ></td>
<td ><input type=checkbox name=ts0 id=tsBox value=2 ></td>
<td ><input type=checkbox name=to0 id=toBox value=4 ></td>
<td ><input type=checkbox name=tf0 id=tfBox value=8 ></td>
<td ><input name=result0 id=resultInput readOnly ></td>
</tr>
<tr>
<td ><input type=checkbox name=query1 id=queryBox value=1 ></td>
<td ><input type=checkbox name=ts1 id=tsBox value=2 ></td>
<td ><input type=checkbox name=to1 id=toBox value=4 ></td>
<td ><input type=checkbox name=tf1 id=tfBox value=8 ></td>
<td ><input name=result1 id=resultInput readOnly ></td>
</tr>
<tr>
<td ><input type=checkbox name=query2 id=queryBox value=1 ></td>
<td ><input type=checkbox name=ts2 id=tsBox value=2 ></td>
<td ><input type=checkbox name=to2 id=toBox value=4 ></td>
<td ><input type=checkbox name=tf2 id=tfBox value=8 ></td>
<td ><input name=result2 id=resultInput readOnly ></td>
</tr>
<tr>
<td ><input type=checkbox name=query3 id=queryBox value=1 ></td>
<td ><input type=checkbox name=ts3 id=tsBox value=2 ></td>
<td ><input type=checkbox name=to3 id=toBox value=4 ></td>
<td ><input type=checkbox name=tf3 id=tfBox value=8 ></td>
<td ><input name=result0 id=resultInput readOnly ></td>
</tr>
<tr>
<td ><input type=checkbox name=query4 id=queryBox value=1 ></td>
<td ><input type=checkbox name=ts4 id=tsBox value=2 ></td>
<td ><input type=checkbox name=to4 id=toBox value=4 ></td>
<td ><input type=checkbox name=tf4 id=tfBox value=8 ></td>
<td ><input name=result4 id=resultInput readOnly ></td>
</tr>
</table></form>
</body></html><script >
function okFun()
{
var d1=new Date();
var queryBoxes=document.frm.queryBox;
var tsBoxes=document.frm.tsBox;
var toBoxes=document.frm.toBox;
var tfBoxes=document.frm.tfBox;
var resultInputs=document.frm.resultInput;
for(var i=0;i<queryBoxes.length;i++)
{
var tempValue=0;
if(queryBoxes[i].checked) tempValue+=1;
if(tsBoxes[i].checked) tempValue+=2;
if(toBoxes[i].checked) tempValue+=4;
if(tfBoxes[i].checked) tempValue+=8;
resultInputs[i].value=tempValue;
} alert("记录数"+queryBoxes.length+"\所花时间(毫秒):"+(new Date()-d1));
}
</script>
我把eval("document.all.query"+i).checked换成document.all("query"+i).checked后
用700条记录做的测试,只快了4秒(110s->106s),看来是我错怪eval了.而且比较麻烦的事,我这两千条数据并不是在一个form里(最初不是我设计的,很奇怪)
这两千条数据差不多在700个form里,等我先用大家的方法搞搞看
---------
关系不大,
把九楼的代码的这几句作一下改动:
var queryBoxes=document.frm.queryBox;
--->>> 改成:var queryBoxes=document.all.queryBox;
或
var queryBoxes=document.getElementsByName("queryBox");