选中复选框时,以下代码会向数组添加复选框值。如何更改此选项,以便在取消选中复选框时从数组中删除复选框的值?
var departments = [];
$("input[name='department_pk[]']").change(function() {
$("input[name='department_pk[]']:checked").each(function(i){
departments[i] = $(this).val();
});
});
答案 0 :(得分:4)
问题是您没有从阵列中删除以前选择的项目。假设您已在数组中选择了5个项目,您有索引0到4的数据,那么您现在取消选择2个项目,每个循环将重置索引0到2,但索引3和4仍然存在于数组中。这就是问题。
更好的解决方案是使用.map()
创建一个新数组var departments = [];
$("input[name='department_pk[]']").change(function () {
departments = $("input[name='department_pk[]']:checked").map(function (i) {
return $(this).val();
}).get();
});
答案 1 :(得分:0)
在你向它添加新元素之前,我先清除数组。
var departments = [];
$("input[name='department_pk[]']").change(function() {
departments = [];
$("input[name='department_pk[]']:checked").each(function(i){
departments[i] = $(this).val();
});
});
答案 2 :(得分:0)
check this..
var departments = [];
$("input[name='department_pk[]']").change(function() {
$("input[name='department_pk[]']").each(function(i){
if(jQuery(this).is(":checked")) {
departments[i] = $(this).val();
} else {
departments[i] = 0;
}
});
});
答案 3 :(得分:-1)
这种方式有效,但map()更准确:
if($(this).is(':checked')) {
departments.push($(this).val());
} else {
departments.pop($(this).val());
}