难道就没有办法解决了吗?
看来只有开发一个activeX控件才行了

解决方案 »

  1.   

    不要用 document.getElementByName 这种写法, 这种写法每次都会产生一个集合, 非常耗资源的, 你可以针对某个特定ID的元素直接引用. IE: document.all.ID   NS: document.ID
      

  2.   

    不知如果采用w3c DOM 结构来遍历html元素是否会改进性能?
    js文件太大,不好帖上来,请见晾!
      

  3.   

    没有代码,就没有办法知道瓶颈的所在。把“然后在将其中的值累计竟然用了一秒多钟”的那段先贴出来看看?测一下“用document.getElementsByName("je")取得一个数组”具体用了多少时间。
      

  4.   

    嗯,给你做个对比试验,应该和你的要求有点接近的:慢:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var ar = ["<table>"];
    var l=1;
    for (var i=0;i<30;i++){
    ar[l++]= "<tr>"
    for (var j=0;j<30;j++){
    ar[l++]="<td><input name=je type=checkbox value="+(i*30+j)+"></td>"
    }
    ar[l++]= "</tr>"
    }
    ar[l++]= "</table>"
    function test(){
    var d0 = new Date();
    var elms = document.getElementsByName("je");
    var d1 = new Date();
    var count = 0;
    for (var i=0;i<elms.length;i++){
    if (elms[i].checked) count += elms[i].value-0;
    }
    var d2 = new Date();
    alert("累积结果:"+count)
    alert("获得元素集合用时:"+(d1-d0))
    alert("遍历元素集合用时:"+(d2-d1))
    }
    //-->
    </SCRIPT>
    </HEAD>
    <BODY>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    document.write(ar.join(""));
    //-->
    </SCRIPT>
    <br><br>
    <button onclick="test()">test</button>
    </BODY>
    </HTML>快
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var ar = ["<table>"];
    var l=1;
    for (var i=0;i<30;i++){
    ar[l++]= "<tr>"
    for (var j=0;j<30;j++){
    ar[l++]="<td><input name=je type=checkbox value="+(i*30+j)+" onclick=sign(this)></td>"
    }
    ar[l++]= "</tr>"
    }
    ar[l++]= "</table>"
    function test(){
    var d0 = new Date();
    var count = 0;
    for (var i in signs)
    count += signs[i];
    var d1 = new Date();
    alert("累积结果:"+count)
    alert("遍历元素集合用时:"+(d1-d0))
    }var signs=new Object();
    function sign(elm){
    signs[elm.uniqueID] = elm.checked?elm.value-0:0;
    }
    //-->
    </SCRIPT>
    </HEAD>
    <BODY>
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    document.write(ar.join(""));
    //-->
    </SCRIPT>
    <br><br>
    <button onclick="test()">test</button>
    </BODY>
    </HTML>
      

  5.   

    function Calculate_all(){
    try{
    with(document.ZZSFB4Form){////////////////计算///////////////////////////////
    //初始化合计数
    if(elements["je"]!=null){
    hjje.value=0;
      for(j=0;j<document.getElementsByName("je").length;j++)//////本期金额小计
      {if(document.getElementsByName("je")[j].value!=""&&document.getElementsByName("zfbz")[j].value==0)
      add(hjje,2,hjje,document.getElementsByName("je")[j]);
      }
       }

    if(elements["se"]!=null){
      if(hjse.value!=""||hjse.value!=0)
         hjse.value=0;
      for(j=0;j<document.getElementsByName("se").length;j++)//////本期税额小计
        {if(document.getElementsByName("se")[j].value!=""&&document.getElementsByName("zfbz")[j].value==0)
         add(hjse,2,hjse,document.getElementsByName("se")[j]);
       }
       }