答案 0 :(得分:6)
这不是错误,这是标准行为。
您应该告知您想要的select
selected
,而不是选择整个option
。 $.param()
需要一个数组才能正常工作。在代码片段中,我将数组作为参数通知,以产生与serialize
相同的结果(似乎它获取元素并将其转换为数组,因为它知道select
可以转换为一个)。
在J Travis的评论
中得到了很好的了解中的第一个选择
param
只需$obj.each(function(){ this.value })
和this.value
仅获得多选
因此$.param()
无法将任何HTML元素转换为正确的数组,然后将其序列化。
$('#submit').on('click', function() {
var selectedItemsArray = $('select').find(':selected').map(function() {
return $(this).text();
}).get();
var selectedItems = $('select').find(':selected') ;
var param_query_Array = $.param({colors: selectedItemsArray});
var param_query_Selected = $.param( selectedItems);
var serialize_query = $('select').serialize();
$('#param').html(param_query_Array);
$('#paramSelected').html(param_query_Selected);
$('#serialize').html(serialize_query);
});
div {
margin: 10px 0;
}
#output,
i {
color: blue;
}
span {
color: #333;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select size="5" multiple name="colors[]">
<option value="red">red</option>
<option value="gold">gold</option>
<option value="green">green</option>
<option value="black">black</option>
<option value="White">white</option>
</select>
<button id="submit">Submit</button>
<div><b>QUERY STRING RESULTS:</b>
<br />
<i>$.param()</i>: <span id="param"></span>
<br />
<i>$.param($('select').find(':selected')</i>: <span id="paramSelected"></span>
<br />
<i>serialize()</i>: <span id="serialize"></span>
</div>