0

我想创建一个带有添加和标记为已完成功能的待办事项列表。li 项目必须是唯一的,因为我使用了label for each checkbox on each li.

然后我$('ul li').length + 1;用来设置他们的 ID 标签。所以每个复选框都是唯一的。

问题是我remove()在选中复选框时使用的。它破坏了编号。例如I have 1,2,3 and I checked 1,2 then I add a new item,该项目的 ID 为 3,这是一个冲突。有什么解决办法吗?

4

2 回答 2

1

不要依靠他们的数量来获得唯一的 ID。这是一个每次调用时都会返回唯一 ID 的函数:

function getUid(prefix) {
  return prefix + '_' +  getUid.count++;
}
getUid.count = 0;


console.log(getUid('checkbox')); // checkbox_0
console.log(getUid('checkbox')); // checkbox_1
console.log(getUid('checkbox')); // checkbox_2
console.log(getUid('checkbox')); // checkbox_3
console.log(getUid('li')); // li_4

真正安全的解决方案(私有变量):

var getUid = function() {
  var count = 0;
  return function(prefix) {
    return prefix + '_' +  count++;
  };
}();
于 2013-11-11T09:15:41.677 回答
0

假设您在所有复选框标签上都有一些类,为什么不直接使用parseInt($('.label-class').last().text()) + 1?虽然我同意其他海报的观点,这可能不是一个干净、通用的解决方案……从它的声音来看,它可能已经足够好了。

如果您没有得到想要的答案,请尝试在问题中添加更多细节。不清楚你在问什么。

于 2013-11-11T09:28:27.217 回答