SerializeArray()返回多选框中的所有项目

时间:2011-12-02 14:54:41

标签: jquery

我需要serializeArray()每次都返回选择框中的所有项目而不仅仅是当前选定的项目,因为我的selectionBox的内容可以增长或缩小。

<select multiple="multiple" id="selectionBox" >
   <option value="email1@test.com">Test1</option>
   <option value="email2@test.com">Test2</option>
   <option value="email3@test.com">Test3</option>
   <option value="email4@test.com">Test4</option>
   <option value="email5@test.com">Test5</option>
</select>

...

//Select 1 item in the select list box
formArray = $("#selectionBox").serializeArray();
alert(formArray.length);  // this will be 1

//Select 5 items in the select list box
formArray = $("#selectionBox").serializeArray();
alert(formArray.length);  // this will be 5

我需要它总是返回完整的5。

3 个答案:

答案 0 :(得分:6)

我认为serializeArray只是序列化将由表单发送的值。如果你想要所有选项,你必须自己编写代码,如下所示:

var arr = [], $select = $("#selectionBox"), name = $select.attr("name");
$select.find("option").each(function() {
    arr[arr.length] = { name: name, value: this.value };
});

答案 1 :(得分:0)

该功能确实仅返回“成功”控件,请参阅jQuery.serializeArray Api。作为一种解决方法,您可以缓存选择的那些,然后选择all,然后将状态重置为缓存值。

答案 2 :(得分:0)

您不必编码。以下示例

HTML:

<form id="testForm">
    <select multiple="multiple" id="selectionBox" name="selectionBox[]">
        <option value="email1@test.com">Test1</option>
        <option value="email2@test.com">Test2</option>
        <option value="email3@test.com">Test3</option>
        <option value="email4@test.com">Test4</option>
        <option value="email5@test.com">Test5</option>
    </select>
</form>

的javascript:

$("#testForm").submit(function (event) {
    console.log($("#selectionBox").serializeArray());
    // output: [ {name: "selectionBox[]", value: ***}, ... ]

    $.post("/path/to/send", $(this).serializeArray()).always(console.log.bind(console));
});