Javascript/jQuery:在多个Select中设置值(选择)

Zwe*_*012 91 javascript jquery multiple-select

我有一个多选:

<select name='strings' id="strings" multiple style="width:100px;">
    <option value="Test">Test</option>
    <option value="Prof">Prof</option>
    <option value="Live">Live</option>
    <option value="Off">Off</option>
    <option value="On">On</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我从我的数据库加载数据.然后我有一个像这样的字符串:

var values="Test,Prof,Off";
Run Code Online (Sandbox Code Playgroud)

如何在多重选择中设置此值?已经尝试更改数组中的字符串并将其作为值放在多个中,但不起作用......!有人可以帮我弄这个吗?谢谢!!!

Kev*_*sox 120

使用使用属性选择器的动态选择器中的值迭代循环.

var values="Test,Prof,Off";
$.each(values.split(","), function(i,e){
    $("#strings option[value='" + e + "']").prop("selected", true);
});
Run Code Online (Sandbox Code Playgroud)

工作示例 http://jsfiddle.net/McddQ/1/

  • 如果我们无论如何都要依赖 jQuery,那么更喜欢 ŁukaszW.pl[`$('#strings').val(values.split(','))`](https://stackoverflow.com/a/ 21322784/1366033)。没有 jQuery,ŁukaszW.pl 的普通旧 Javascript [`document.getElementById('strings').value = ["Test", "Prof", "Off"]`](/sf/answers/1160810101/ 1366033) 也可实现单线 (2认同)

Łuk*_*.pl 99

在jQuery中:

$("#strings").val(["Test", "Prof", "Off"]);
Run Code Online (Sandbox Code Playgroud)

或者在纯JavaScript中:

var element = document.getElementById('strings');
var values = ["Test", "Prof", "Off"];
for (var i = 0; i < element.options.length; i++) {
    element.options[i].selected = values.indexOf(element.options[i].value) >= 0;
}
Run Code Online (Sandbox Code Playgroud)

jQuery在这里做了重要的抽象.

  • 嗯,纯粹的JavaScript在Chrome/mac或FF/mac上对我不起作用.它对实际选择的内容没有影响,至少在浏览器中以可视方式显示. (4认同)
  • 它在我传递字符串时工作,但不是在我传递数组时. (3认同)
  • 对于那些遇到此问题的人,您应该确保在 JavaScript 中设置值后触发 'change' 事件。使用 jQuery 这将是 $("#strings").val(["Test", "Prof", "Off"]).trigger('change'); (2认同)

Pos*_*ing 18

只需为jQuery val函数提供一组值:

var values = "Test,Prof,Off";
$('#strings').val(values.split(','));
Run Code Online (Sandbox Code Playgroud)

并以相同的格式获取所选值:

values = $('#strings').val();
Run Code Online (Sandbox Code Playgroud)


kin*_*ser 6

纯JavaScript ES6解决方案

  • 使用querySelectorAll函数捕获每个选项并拆分values字符串.
  • 使用Array#forEach从每一个元素遍历values数组.
  • 使用Array#find找到匹配的给定值的选项.
  • 将其selected属性设置为true.

注意:Array#from类似数组的对象转换为数组,然后您就可以使用Array.prototype它上的函数,如findmap.

var values = "Test,Prof,Off",
    options = Array.from(document.querySelectorAll('#strings option'));

values.split(',').forEach(function(v) {
  options.find(c => c.value == v).selected = true;
});
Run Code Online (Sandbox Code Playgroud)
<select name='strings' id="strings" multiple style="width:100px;">
    <option value="Test">Test</option>
    <option value="Prof">Prof</option>
    <option value="Live">Live</option>
    <option value="Off">Off</option>
    <option value="On">On</option>
</select>
Run Code Online (Sandbox Code Playgroud)