如何序列化复选框的值以通过AJAX传递?

时间:2014-04-22 14:51:44

标签: jquery checkbox

我有一组复选框,它们都具有相同的名称,称为“部门”。每当用户检查这些Department复选框中的一个或多个时,我希望通过AJAX将值分段并发送,以便它可以根据所选值检索更多数据。

到目前为止,我已经这样做了:

$('#user-Departments input[name="Department"]').change(function () {
    var selected = $('#user-Departments input[name="Department"]').serialize();
    console.log(selected);
});

因此,如果任何Department复选框在id为user-Departments的div中发生更改,那么我要求JQuery将值设置为seralize。该值包含在每个复选框的ID属性中。但我的控制台显示了这一点:

Department=4&Department=9

如何将值4和9放入以逗号分隔的字符串中,例如“4,9”以便我可以将其作为列表传递给我的Web服务器(Coldfusion)?

添加JSFIDDLE: http://jsfiddle.net/mjcJ4/

3 个答案:

答案 0 :(得分:2)

http://jsfiddle.net/3K6mL/

 $(document).ready(function() {

    $("input[name='department']").change(function() {

        var departmentIds = [];

        var selectedDepartments = $("input[name='department']:checked").each(function(){
            departmentIds.push($(this).val());
        });

        //post the values to the url 
        $.post("/your/url/", JSON.stringify(departmentIds));

    });

 });     

我已将值添加到集合中,然后将值转换为json以用于帖子。请注意我是如何获得" Checked" (当其中一个复选框被勾选或未勾选时)。

答案 1 :(得分:2)

http://jsfiddle.net/mjcJ4/7/

$('#user-Departments input[name="Department"]').change(function () {
    var selected = [];

    $('#user-Departments input:checked[name="Department"]').each(function(index) {
        selected.push($(this).val());
    });

    console.log(selected.toString());
});

答案 2 :(得分:1)

使用.map()我会更有效率

$('#user-Departments input[name="Department"]').change(function () {
  var selected = $('#user-Departments input[name="Department"]:checked').map(function() { 
    return this.value; 
  }).get().join(',');
  console.log(selected);
});

UPDATED FIDDLE