场景: 列表的全选和取消全选操作,如下图所示
图1例如:当在左边列表全选后,又在右边列表删除几个选中项后,再次再左边点击全选 又点击取消全选时出现了一个问题。
var selectAll = function(){
if (!isAll) {
// 取消全选操作需左边check 设置为false,并删除右边列表中数据
// 这个for循环删除会有问题,因为下标问题,后面的元素会跳过去一个下标,导致删除不全或删错
for (var i = 0, l = list.length; i < l; i++) {
list[i].check = false;
for (var i2 = 0; i2 < selectList.length; i2++) {
if (list[i].id === selectList[i2].id) {
selectList.splice(i2, 1);
// 解决办法一:这里加一行代码 i2 = i2-1
// 注意 这里的 selectList 长度是变化着的,不能写成 for (var i2 = 0, l2 = selectList.length; i2 < l2; i2++)
}
}
}
// 解决办法二:换成 for...in 删除
for (var i in list) {
list[i].check = false;
for (var i2 in selectList) {
if (list[i].id === selectList[i2].id) {
selectList.splice(i2, 1);
}
}
}
}
网友评论