背景
我正在尝试实现一个功能,即当用户在表中单击复选框时,应将复选框的属性value
和data-title
作为新键值对数组元素存储在JS对象文字命名的selected
中。
如果用户第二次单击相同的复选框,则应删除相应的数组元素。
问题
第一次单击复选框时,按预期在对象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);
});
val.key == $(this).attr("value")
有关的问题。这很可能(可能是由于Javascript中相等性的奇怪性质),永远不会返回true。你应该也使用 ===。调试你的javascript并检查这个问题。 - Liam$.each
回调函数中,this
等于什么? - Davin Tryon