在我的HTML表单中,该部分带有<select>
:
<form id="fruits">
<input type="text" name="title" value="some_title"/>
<select name="color">
<option value="">all</option>
<option value="red">red</option>
<option value="green">green</option>
</select>
</form>
然后使用
jQuery.serializeArray();
序列化此表格:var serialized_data = $("form#fruits").serializeArray();
即使选择带有
value=""
的第一个选项,它也会被序列化。所以我得到一个像这样的数组:{"title":"some_title", "color":""}
但是我需要得到一个像这样的数组:
{"title":"some_title"}
没有
"color":""
如何排除此
<select>
,以便不进行序列化?附言
我已经尝试过类似的事情:
$("#fruits :input[value!='']").serializeArray();
和其他关于StackOverflow的答案... id不适用于
.serializeArray();
!请给我一个真正有效的答案,并告诉我您用来测试它的jQuery版本!
最佳答案
如果其值为空,则只需在序列化之前将其禁用即可,然后重新启用它
$("#btn").click(function(e){
e.preventDefault();
let $form = $('#form');
let $select = $form.find('#select');
if($select.val() === ''){
$select.attr('disabled', 'disabled');
}
let value = $form.serializeArray();
$select.removeAttr('disabled');
console.log(value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form">
<input type="checkbox" checked name="check" />
<select name="select" id="select">
<option value="">Please select</option>
<option value="1">Value 1</option>
</select>
<button id="btn">Serialize and log</button>
</form>