获取布尔数组的最佳方法是什么,表示是否选择了该选项?
当标记为:
<select id="myMultipleSelect" multiple>
<option selected>Urgent</option>
<option selected>Important</option>
<option selected>Other</option>
</select>
所需的结果数组应该结构为:
选择了所有选项:[true,true,true]
。
紧急选项:[true,false,false]
。
紧急,重要选项已被选中:[true,true,false]
。
我尝试使用$ .val()但它返回(当选择了所有选项时)["Urgent","Important","Other"]
或仅选择紧急选项时,它会返回:{{1} }
["Urgent"]
有没有优雅的方法来实现这个目标?
答案 0 :(得分:2)
您可以结合使用jQuery .get()
和Array#map
$('option',this)
从option
select
个{}
.get()
从jQuery选择器返回Javascript DOM元素
.map()
通过您的数组
$(e).is(':selected')
会返回true
或false
$('#myMultipleSelect').on('change', function(){
console.log($('option',this).get().map(e => $(e).is(':selected')));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="myMultipleSelect" multiple>
<option selected>Urgent</option>
<option selected>Important</option>
<option selected>Other</option>
</select>
&#13;
答案 1 :(得分:1)
您可以执行以下操作:
$('#myMultipleSelect').on('change', function() {
var selected = $.map($(this).children('option'), function(opt) {
return $(opt).prop('selected') === true;
});
console.log(selected);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="myMultipleSelect" multiple>
<option selected>Urgent</option>
<option selected>Important</option>
<option selected>Other</option>
</select>
它会侦听下拉列表的更改事件,然后遍历其option
标记以映射其selected
属性。
答案 2 :(得分:0)
请检查以下代码
<!DOCTYPE html>
<html>
<head><script src="https://code.jquery.com/jquery-1.12.4.min.js"></script></head>
<body>
<select id="myMultipleSelect" multiple>
<option selected value='Urgent'>Urgent</option>
<option selected value='Important'>Important</option>
<option selected value='Other'>Other</option>
</select>
<button type='button' onclick='getValue()'>Get value</button>
<script>
function getValue()
{
var array;
var value = $("#myMultipleSelect").val();
debugger;
if (~value.indexOf("Urgent") && ~value.indexOf("Important") && ~value.indexOf("Other")){
array = [true,true,true];
}
else if (~value.indexOf("Urgent") && !~value.indexOf("Important") && !~value.indexOf("Other")){
array = [true,false,false];
}
else if (~value.indexOf("Urgent") && ~value.indexOf("Important") && !~value.indexOf("Other")){
array = [true,true,false];
}
alert(array);
}
</script>
</body>
</html>