Ext移除元素的方法注意
核心:采用从n-1 到 0 递减遍历;
而不是采用从 0 到 n-1 递增遍历。
例子:
//【示例:】/** * 移除反馈项*/function deleteNewFeedbackItem(){ var io=Ext.getCmp('chekBoxesId'); var i = io.items.length; // alert(i); //判断是否选中至少一个。 var nullCountNum = 0; for(var n=0;n<i;n++){ if(!io.items.items[n].getValue()){ nullCountNum ++; } } //如果一个都没选中,则返回。 if(nullCountNum == i){ Ext.MessageBox.alert("提示:","请选择要删除的反馈项!"); return; } /**移除选中的项。 * 方法:关于在一次选中多个的情况下,采用items[n]从n到0,递减遍历。 * 说明:如果采用从0到n,递增遍历,则会报错。 * 原因:由于items移除元素后,后面的元素会自动向前补齐, * 这样后面的被选中的元素的索引会-1,但本次循环中的迭代值+1, * 因此无法指向已经向前移动了的元素,从而导致被选中的元素不能 * 被删除。而当迭代值继续增加时,会出现索引越界的错误。 * 即使外层再套一层循环也无效,循环已中断。 */ for(var n=i-1;n>=0;n--){ if(io.items.items[n].getValue()==true){ io.remove(io.items.items[n]); } } io.doLayout();}