在下拉列表中设置选定的值不正确

时间:2014-03-21 09:50:39

标签: javascript jquery

我使用以下代码在下拉列表中设置选定的值,我从逗号分隔的字符串中拆分值,它没有按预期工作。

如果使用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

4 个答案:

答案 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();

Fiddle

答案 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();

Fiddle

答案 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以包含索引而不是值。