选择2禁用/启用特定选项

Mad*_*bar 19 jquery select jquery-select2

我有list2类型的列表.

<select id="list" class="form-control select2 select2-hidden-accessible" tabindex="-1" aria-hidden="true">
<optgroup label="Types">
<option value="None">None</option>
<option value="1">One</option>
<option value="2">Two</option>
</optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)

我想禁用值为1的选项, 所以我喜欢这样

$("#list>optgroup>option[value='1']").prop('disabled',true);
   Result:// <option value="1" disabled>One</option>
Run Code Online (Sandbox Code Playgroud)

它工作正常;但如果我想重新启用禁用选项我尝试下面的代码,但仍然禁用select2选项.

$("#list>optgroup>option[value='1']").prop('disabled',false);
$("#list>optgroup>option[value='1']").removeProp('disabled');
  Result://   <option value="1">One</option>
Run Code Online (Sandbox Code Playgroud)

但奇怪的是该选项的禁用属性被删除.但select2选项保持禁用状态.

没有得到如何解决这个问题.需要帮忙.

更新:如果我检查select2的DOM,即使在removinf禁用后它也具有此属性.

<li class="select2-results__option" id="select2-template-type-list-result-4qd3-merge" role="treeitem" aria-disabled="true">One</li>
Run Code Online (Sandbox Code Playgroud)

如果我使aria-disabled ="false"它将启用.无法得到原因.

CBr*_*roe 25

实现此目的的最简单方法是.select2(…)在更改disabled属性后再次调用该元素.

http://jsfiddle.net/xoxd2u15/

由于select2 用自定义HTML元素替换原始选择字段(并隐藏原始元素),并且显然不会在调用后不断"观察"原始选择元素的选项以便在其禁用状态下进行更改,因此您必须再次调用它更改状态,以便从原始元素的选项中读取当前属性值.

  • 这是Select2 4.0.0中的[已知错误](https://github.com/select2/select2/issues/3347).`disabled`属性被缓存,但`selected`(和其他属性)不是. (4认同)
  • 此问题已修复:https://github.com/select2/select2/commit/bd7ac9df03b008f03bb15c66fcab4682589bfc2a (3认同)