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" : ...
    ...
  }
}

解决方案 »

  1.   

    根本没必要用eval 
    你这样试试,速度快多了.
    document.all["query"+i].
      

  2.   

    尽量不要用ALL
    用表单名
    ALL要遍历全部元素
    document.form1.query[i].checked
    这样也可以
      

  3.   

    还有几种方法不用eval都可以的,且速度比较快:
    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);
    }
    }
      

  4.   

    还有几种方法不用eval都可以的,且速度比较快:
    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)
      {
        
    }
    }
      

  5.   

    按楼主的意思,如果把慢归罪于eval,可以作如下改动:
    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,
    当然会很慢。
      

  6.   

    代码如下,加成两千笔记录试试。
    初步测试结果是: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>
      

  7.   

    谢谢楼上各位,上午有点事儿,还没来得及试
    我把eval("document.all.query"+i).checked换成document.all("query"+i).checked后
    用700条记录做的测试,只快了4秒(110s->106s),看来是我错怪eval了.而且比较麻烦的事,我这两千条数据并不是在一个form里(最初不是我设计的,很奇怪)
    这两千条数据差不多在700个form里,等我先用大家的方法搞搞看
      

  8.   

    我这两千条数据并不是在一个form里
    ---------
    关系不大,
    把九楼的代码的这几句作一下改动:
    var queryBoxes=document.frm.queryBox;
    --->>> 改成:var queryBoxes=document.all.queryBox;

    var queryBoxes=document.getElementsByName("queryBox");