try,把要删的放数组里,然后再删,要不顺序就乱了
----------------------------------------------
function del()
{
var i;
var z = document.getElementById("list1");
var aa=new Array();
var j=0;
for(i=0;i<z.options.length;i++)
{
if(z.options[i].selected)
{
aa[j++]=z.options[i];
}
}
for(i=0;i<aa.length;i++){
z.removeChild(aa[i]);
}
}

解决方案 »

  1.   

    或者从下往上删除,selected不会混乱
    for(i=z.options.length-1;i>=0;i--)
    {
    if(z.options[i].selected)
    {
    z.options.remove(i);
    }
    }
      

  2.   

    楼主的错误是
    每删除一项z.options.length就减1,而i也应该对应不变
    还可以另类一些
    while(z.selectedIndex>=0)
    {
               z.options.remove(z.selectedIndex);
    }
      

  3.   

    其实还有个比较死板的办法,直接判断选中项的value和text<SCRIPT LANGUAGE="JavaScript">
    <!--
    function del(iv,it)
    {
    var i;
    var z = document.getElementById("list1");

    for(i=0;i<z.options.length;i++)
    {
    if(z.options[i].value==iv && z.options[i].text==it)
    {
    z.options.remove(z.selectedIndex);
    break;
    }
    }
    }
    function setSel()
    {
    var i;
    var z = document.getElementById("list1");
    var istr = "";
    for(i=0;i<z.options.length;i++)
    {
    if(z.options[i].selected)
    {
    istr += z.options[i].value + "#" + z.options[i].text + "|";
    }
    }
    return istr;
    }
    function getSel(str)
    {
    ary = str.split("|");
    for(i=0;i<ary.length;i++)
    {
    if( ary[i] != "" )
    {
    ary1 = ary[i].split("#");
    del(ary1[0],ary1[1]);
    } }
    }
    //-->
    </SCRIPT>
    <select name="select1" size="10" id="list1" multiple>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
    </select><input type="button" name="Submit2" value="删除" onClick="getSel(setSel());">