【发布时间】:2016-05-19 16:10:32
【问题描述】:
上下文
我正在尝试实现一个功能,以便当用户单击表格中的复选框时,该复选框的属性 value 和 data-title 应存储在名为 selected 的 JS 对象文字中作为新的键值对数组元素。
如果用户第二次点击同一个复选框,相应的数组元素应该被删除。
问题
第一次单击复选框时,会按预期在对象selected 中创建一个数组。
但是,当第二次单击同一个复选框时,不会删除相应的数组,而是添加一个新的(重复的)。
代码
var selected = {items:[]};
$('#table').on('click', 'input[type="checkbox"]', function() {
var found = false;
$.each(selected.items, function(i, val) {
if (val.key == $(this).attr("value")) {
selected.items.splice(i ,1);
found = true;
return false; //step out of each()
}
});
if (found == false) {
selected.items.push({key: $(this).attr("value"), value: $(this).attr("data-title")});
}
console.log(selected);
});
【问题讨论】:
-
为什么不让它依赖于复选框的
checked状态呢?我假设您的数组应该代表当前选中的框。 -
val.key == $(this).attr("value")可能有问题。这很可能(可能是由于 Javascript 中相等的奇怪性)永远不会返回 true。您可能也应该使用===。 Debug your javascript 并检查一下 -
问题写得很好顺便说一句,干得好。要是每个低代表用户都这么体贴就好了
-
在
$.each回调中,this等于什么? -
只需重建阵列。其他选项是检查选中状态。如果选中,请执行您正在执行的操作。如果未选中循环并找到匹配项并删除该索引。
标签: javascript jquery arrays checkbox