LZ 似乎对 for 的运行过程并不了解!!!// var i=0 仅在进入循环时执行一次! // i<e.options.length 在首次及后续循环开始前判断! // i++ 每次循环结束时执行! for( var i=0;i<e.options.length;i++) { if( e.options[i].selected){ e.remove(i); //i=0; // 之后马上执行 i++,变成了 1 // 因此如果要符合 LZ 的正向思维方式的话,必须写成 i=-1 i = -1; }注:降序删除法才是正途,简捷易懂,哈
HOHO,偶也碰到过这个问题. LZ可以试试"添加删除表格行",很快就明白了. 楼上说得很对.
主要原因是你把e.options.length放在循环里了,删除一个,那么e.options.length的值也减一。 应该设个变量var len = e.options.length 然后(var i = 0 ; i < len ; i++ ) 或者 (var i = len-1 ; i >= 0 ; i--)都可以吧。
再删第2个的时候他又是从0开始算的
这里我已负傎为0了 为什么 alert(i+"body");和alert(i+"head") 弹出来的傎不一样
{
...
}
{
for( var i=e.options.length - 1; i>=0; i--)
{
if( e.options[i].selected)
{
e.remove(i);
}
}
}
for( var i=e.options.length - 1; i>=0; i--)
的确是个简单的好方法但是我这样写理论上应该是行的通呀!
for( var i=0;i<e.options.length;i++){
if( e.options[i].selected){
e.remove(i);
i=0; //这个i 和初始化的i 不是同一个变量?,真不知道它JS是怎么运行的
//如果有选择了,就把i=0,再丛头开始判断,但是 i=0;完 对 i<e.options.length 的i没起作用
}
}不知道 js 的for 语句是怎么走的
if( e.options[i].selected){
e.remove(i);
i--; //要把i=0;改成 i--; 就可以
}
}
// i<e.options.length 在首次及后续循环开始前判断!
// i++ 每次循环结束时执行!
for( var i=0;i<e.options.length;i++)
{
if( e.options[i].selected){
e.remove(i);
//i=0; // 之后马上执行 i++,变成了 1
// 因此如果要符合 LZ 的正向思维方式的话,必须写成 i=-1
i = -1;
}注:降序删除法才是正途,简捷易懂,哈
LZ可以试试"添加删除表格行",很快就明白了.
楼上说得很对.
应该设个变量var len = e.options.length
然后(var i = 0 ; i < len ; i++ ) 或者 (var i = len-1 ; i >= 0 ; i--)都可以吧。