我使用以下代码在下拉列表中设置选定的值,我从逗号分隔的字符串中拆分值,它没有按预期工作。
如果使用string='text1,text2,text3,text4'
,它可以正常工作,如果我使用string='text2'
则无效。
var string='text1,text2,text3,text4';
var opts = string.split(",");
function selectOptions()
{
var obj = $('#dropdown');
for (var i in opts)
{
obj.find('option[value=' + i + ']').prop('selected', true);
}
}
selectOptions();
这是Fiddle。
答案 0 :(得分:2)
您可以通过以下方式完成:
var string='text2';
var opts = string.split(",");
function selectOptions() {
var obj = $('#dropdown');
for (var i in opts) {
console.log(i);
obj.find('option:contains(' + opts[i] + ')').prop('selected', true);
}
}
selectOptions();
答案 1 :(得分:1)
你应该尝试这样的事情:
<select id="dropdown" multiple="multiple">
<option value="text1">text1</option>
<option value="text2">text2</option>
<option value="text3">text3</option>
<option value="text4">text4</option>
<option value="text5">text5</option>
<option value="text6">text6</option>
<option value="text7">text7</option>
</select>
代码:
var string='text4';
var opts = string.split(",");
function selectOptions() {
var obj = $('#dropdown');
for (var item in opts) {
obj.find('option[value=' + opts[item] + ']').prop('selected', true);
}
}
selectOptions();
答案 2 :(得分:0)
这是因为您的选择值与split()生成的opts索引之间没有匹配。
这是一个概念问题
如果你真的想把你的比较基于标签而不是选项值,你可以这样做:
var string='text2,text4';
var opts = string.split(",");
function selectOptions() {
var $obj = $('#dropdown option');
for (var i in opts) {
$obj.each(function(){
$option = $(this);
if($option.text() === opts[i]) $option.prop('selected', true);
});
}
}
selectOptions();
请参阅fiddle here
答案 3 :(得分:0)
在for(var i in opts)
i
中包含当前项的索引,因此始终以0
开头。你可以改变你的html和JavaScript:http://jsfiddle.net/xEwyd/7/
我在html中添加了实际值。如果这不可能,您可以随时更改string
以包含索引而不是值。