在我的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>

10-06 07:40