TRY:
<div id="dv">&nbsp;</div><p>
<script language="javascript">
var obj = new Array();
for(i=0;i<7000;i++){
obj[i] = "<option value=\""+i+"\">opt "+i+"</option>";
}
var selectstr = "<select id=\"st\" size=\"20\" style=\"width:80%\" multiple>"+obj.join('')+"</select>"
dv.innerHTML = selectstr;function selectAllA(obj){
var n = obj.children.length;
for(var b=0;b<n;b++){
obj.children[b].selected = true;
}
}function selectAllB(obj){
var oldstr = obj.outerHTML;
var reg = /<option/ig;
var newstr = oldstr.replace(reg,"<option selected");
dv.innerHTML = newstr;
}</script>
<p>
<input type="button" value="Select All A" onclick="selectAllA(st);">
<input type="button" value="Select All B" onclick="selectAllB(st);">

解决方案 »

  1.   

    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head><body>
    <form name=formA>
    <input name=selectall type=checkbox onclick="document.getElementById('com_selected').style.visibility='hidden';setTimeout('checkall(document.formA);',10)" >
    <select name=com_selected multiple size=10 >
    <script>
    for(var i=0;i<7000;i++)
    document.write("<option value=1>"+i+"</option>");
    </script>
    </select>
    </form>
    </body></html><script>
    function checkall(form)
    {
        var mlist = document.getElementById('com_selected');
        var mlistOptions=mlist.options;
        var trueOrFalse=form.selectall.checked;
        for(var i=mlistOptions.length-1;i>-1;i--)
        {
            mlistOptions[i].selected=trueOrFalse;
        }
        mlist.style.visibility="";
    }
    </script>
      

  2.   

    如果效率有问题,请注意:1。尽量减少for循环里对象的调用层次
        var e=mlist.options[i];
        e.selected=form.selectall.checked;
        //mlist.options可以拿到循环外取
        //form.selectall.checked也可以拿到循环外取
    2。select是个怪胎,可以先把它隐藏再改option的选中状态,改完后再显示select,以减少显示时间
      

  3.   

    另外,页面有一个select有七千个选项,
    本身就是一件“不可接受”的事。
      

  4.   

    JK兄,偶刚刚测试也是为之一怪,偶把你的更改SELECT的VISIBILITY状态的不运行直接运行选定那段,比先隐藏再运行慢,呵呵,郁闷  ^_^
      

  5.   

    通常是一次运行最后显示
    不过select是个怪胎
    隐藏是为了减少边运行边显示所花的时间
      

  6.   

    谢谢大家的热心帮忙, 我发现个问题,上面你们写的selectall 再怎样慢也是10秒左右, 但我这里的要运行60秒, 太难受了。 我这里的数据格式是192.168.1.3--[192.168.1.3] value和显示的都是这个格式, 会不会是我的options数组太大所致的效率低?? 还会有哪些会影响效率的???  to dh20156(风之石) , 你的方法抛弃了对数组的操作,如果找不到原因我会改会这种试下。
      
      to  JK_10000(JK) ,  select有七千个选项的确是可操作性不强,不过这个界面本来就是这样,暂时不能大改,所以还要顶一阵子。