【发布时间】:2010-11-22 15:31:10
【问题描述】:
当用户选中或取消选中表单中的复选框时,我正在尝试更新全局数组。然后该数组将被提交给服务器以更新数据库中选中的选项。 我已经将选中复选框的 ID 推送到数组中,但不确定如何删除它们。
我创建了一个基本的 jsFiddle 在这里演示:
PS - 稍后将正确命名该数组:)
【问题讨论】:
标签: javascript jquery arrays push splice
当用户选中或取消选中表单中的复选框时,我正在尝试更新全局数组。然后该数组将被提交给服务器以更新数据库中选中的选项。 我已经将选中复选框的 ID 推送到数组中,但不确定如何删除它们。
我创建了一个基本的 jsFiddle 在这里演示:
PS - 稍后将正确命名该数组:)
【问题讨论】:
标签: javascript jquery arrays push splice
为什么每次点击都会这样做,只需在提交表单时执行 - 您也可以使用 :checked 选择器,而不是选择和迭代您不感兴趣的元素。
正如 jyoseph 建议的那样 - 您可以在此处使用序列化数组来构建名称/值数组
例如
$('#submitButton').click( function(ev){
var ids = [];
$(':checkbox:checked').each( function(){
ids.push(this.id);
});
//do something with ids
});
【讨论】:
由于您每次都在遍历所有复选框,因此只需在开头清空数组,然后只将选中的项目放回:
ids = [];
if (this.checked) {
ids.push(this.id);
}
【讨论】:
$(this).is(":checked")换成更高效的this.checked,把$(this).attr("id")换成更高效的this.id。 OP 的代码有一个小错误,我也修复了。为您的回答 +1。
我认为您可能对 jQuery serializeArray() (api link) 很满意
$('#myForm input[type=checkbox]').change(function(){
// get all checked checkboxes
var ids = $('myForm input[type=checkbox]:checked').serializeArray();
});
【讨论】: