将选择多个输入转换为布尔数组

时间:2018-03-26 09:27:15

标签: javascript jquery html

获取布尔数组的最佳方法是什么,表示是否选择了该选项?

例如:

当标记为:

<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"]

有没有优雅的方法来实现这个目标?

3 个答案:

答案 0 :(得分:2)

您可以结合使用jQuery .get()Array#map

  • $('option',this)option

  • 中选择每select个{}
  • .get()从jQuery选择器返回Javascript DOM元素

  • .map()通过您的数组

  • 如果选择了您的选项,
  • $(e).is(':selected')会返回truefalse

&#13;
&#13;
$('#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;
&#13;
&#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>