我需要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。
答案 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));
});