上下文
我正在尝试实现一项功能,以便当用户单击表格中的复选框时,复选框的属性 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);
});
最佳答案
each
中的 this
上下文错误。它不再是点击处理程序中的元素
尝试
$('#table').on('click', 'input[type="checkbox"]', function() {
var found = false;
var value = $(this).val();// store value from `this` before entering `each`
$.each(selected.items, function(i, val) {
if (val.key == value) {
selected.items.splice(i ,1);
found = true;
return false; //step out of each()
}
});
....
关于javascript - 从 javascript 对象中删除数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35296044/