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

Posted

技术标签:

【中文标题】Javascript/jQuery:在多个选择中设置值(选择)【英文标题】:Javascript/jQuery: Set Values (Selection) in a multiple Select 【发布时间】:2013-05-11 01:53:23 【问题描述】:

我有一个多选:

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

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

var values="Test,Prof,Off";

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

【问题讨论】:

所有这些示例都只适用于上面给出的硬编码值,而不适用于数据库中的真实字段值。一旦你用数据库替换值,例如:values = $('#').val();它不起作用,它只选择下拉列表的第一个值。而不是给出正确答案,如果我写了真值堆栈溢出会删除我的观点。 【参考方案1】:

基本上做一个values.split(','),然后循环遍历结果数组并设置Select。

【讨论】:

【参考方案2】:

使用使用属性选择器的动态选择器中的值遍历循环。

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

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

【讨论】:

那很酷,但是你怎么说选择的vlaues应该在id=string的“多选”中选择? @user1824136 太好了,很高兴我今天早上能帮到别人! 如果我们还是要依赖 jQuery,更喜欢 ŁukaszW.pl$('#strings').val(values.split(','))。如果没有 jQuery,ŁukaszW.pl 的 Plain Old javascript document.getElementById('strings').value = ["Test", "Prof", "Off"] 也可以单行完成【参考方案3】:

在 jQuery 中:

$("#strings").val(["Test", "Prof", "Off"]);

或纯 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;

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

【讨论】:

这非常适合我和我的“选择”选择...必须一次添加所有值(就像你上面说的) 嗯,纯 javascript 在 Chrome/mac 或 FF/mac 上不适合我。它对实际选择的内容没有影响,至少在浏览器中以可视方式显示。 它在我传递字符串时起作用,但在我传递数组时不起作用。 有同样的问题;这仅适用于字符串值,不适用于数组(使用纯 JS,而不是 jQuery)。 对于那些遇到此问题的人,您应该确保在 JavaScript 中设置值后触发“更改”事件。使用 jQuery 这将是 $("#strings").val(["Test", "Prof", "Off"]).trigger('change');【参考方案4】:

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

var values = "Test,Prof,Off";
$('#strings').val(values.split(','));

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

values = $('#strings').val();

【讨论】:

【参考方案5】:
var groups = ["Test", "Prof","Off"];

    $('#fruits option').filter(function() 
      return groups.indexOf($(this).text()) > -1; //Options text exists in array
    ).prop('selected', true); //Set selected

【讨论】:

【参考方案6】:

纯 JavaScript ES6 解决方案

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

注意Array#from类数组 对象转换为数组,然后您就可以在其上使用 Array.prototype 函数,例如 find 地图

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;
);
<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>

【讨论】:

【参考方案7】:

纯 JavaScript ES5 解决方案

由于某种原因你不使用 jQuery 或 ES6?这可能会对您有所帮助:

var values = "Test,Prof,Off";
var splitValues = values.split(',');
var multi = document.getElementById('strings');

multi.value = null; // Reset pre-selected options (just in case)
var multiLen = multi.options.length;
for (var i = 0; i < multiLen; i++) 
  if (splitValues.indexOf(multi.options[i].value) >= 0) 
    multi.options[i].selected = true;
  
<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" selected>On</option>
</select>

【讨论】:

【参考方案8】:

这是替换的一些答案中的错误|

var mystring = "this|is|a|test";
mystring = mystring.replace(/|/g, "");
alert(mystring);

这个更正是正确的,但是 |最后应该是这样的\|

var mystring = "this|is|a|test";
mystring = mystring.replace(/\|/g, "");
alert(mystring);

【讨论】:

以上是关于Javascript/jQuery:在多个选择中设置值(选择)的主要内容,如果未能解决你的问题,请参考以下文章

jquery组合多个变量(元素设置为vars)

如何在 JavaScript 中设置多个值以列出值

我如何从多个标签中获取多个数据,并将它们作为 json 存储在 javascript、jquery 中

JavaScript/jQuery:将多个参数传递给 API 中的 POST 请求

iPhone喜欢使用Javascript \ Jquery的选择器控件[重复]

Javascript - Jquery选择器