0

从 ajax 请求我得到这个响应

val1,val2,val3

并有一个 id 与它们等效的列表,例如

<select multiple>
  <option id="val1">val1</option>
  <option id="val4">val4</option>      
  <option id="val5">val5</option>
  <option id="val2">val2</option>
  <option id="val6">val6</option>
  <option id="val1">val3</option>
</select>

如何为 ajax 响应中的所有选项 ID 提供所选的 attr?像这样:

<select multiple>
  <option id="val1" selected="selected">val1</option>
  <option id="val4">val4</option>      
  <option id="val5">val5</option>
  <option id="val2" selected="selected">val2</option>
  <option id="val6">val6</option>
  <option id="val1" selected="selected">val3</option>
</select>

我希望这很清楚!提前谢谢了

4

2 回答 2

4

尝试使用filter(),您还需要设置 select 的 multiple 属性以允许选。

现场演示

var arr = 'val1,val2,val3'.split(',');
$('select option').filter(function(){
    return arr.indexOf(this.id) != -1;
}).prop('selected', true);

Select 的多个属性

此布尔属性表示可以在列表中选择多个选项。如果未指定,则一次只能选择一个选项Reference

jQuery过滤器()

给定一个表示一组 DOM 元素的 jQuery 对象,.filter() 方法从匹配元素的子集构造一个新的 jQuery 对象。提供的选择器针对每个元素进行测试;与选择器匹配的所有元素都将包含在结果中。

于 2013-07-02T18:04:33.343 回答
1

你需要做两件事:

  • id将您的所有属性更改optionvalue. 它不适合id在选项中使用。此外,您似乎id对多个元素使用相同的,这在语义上是错误的。如果val不使用,选项内的文本将作为选项的值。

    <select>
      <option value="val1">val1</option>
      <option value="val4">val4</option>      
      <option value="val5">val5</option>
      <!-- rest of your options -->
    </select> 
    
  • 然后,如果您需要选择多个选定选项,则必须使用select。multipleselect必须看起来像这样:

    <select multiple="multiple">
      <option value="val1">val1</option>
      <option value="val4">val4</option>      
      <option value="val5">val5</option>
      <!-- rest of your options -->
    </select> 
    

现在,对于您的问题,您可以只split将从ajax调用中获得的数据放入一个数组中,然后将其传递给 jQuery 的val. 这将节省 JS 引擎大量搜索 id 和更改选项属性的时间。

//store your ajax response in a variable
var values = 'val1,val2,val3'.split(',');
//assign multiple values to <select>
$("select").val(values);

演示:http: //jsfiddle.net/hungerpain/J7exP/4/

有关 的更多信息val请参阅文档

于 2013-07-02T18:20:12.707 回答