select2不会禁用或清除

时间:2013-07-16 15:36:43

标签: jquery-select2

我有一个辅助选择从属于主要选择(选择一个商店,然后选择一个部门 - 选择一个国家,然后选择一个州)。

无论我撕掉多少其他代码,我绝对无法使用select2('enable',false)和('data',null)方法。

<select id="stores">
  <option value="foo">foo</option>
</select>
<select id="depts">
  <option value="bar">bar</option>
</select>

// ...some logic that selects a store, then fetches that store's depts ...

$('#depts').select2('enable',false);// does not disable control
$('#depts').select2('data',null); // does not clear control

所以我不得不这样做:

$('select#depts').empty(); // clears HTML element
$('#depts').select2(); // re-enhances select w/ select2
$('#depts').select2('disable',true); // disables 

它在jsfiddle中表现得很好,所以我甚至无法发布示例并请求帮助。我只是......难倒。

8 个答案:

答案 0 :(得分:29)

// to disable
$('#statusSelect').select2('disable');

//to enable
$('#statusSelect').select2('enable');

答案 1 :(得分:11)

这适用于所有浏览器:

$('#statusSelect').select2('destroy');
$('#statusSelect').prop('disabled', true);
$('#statusSelect').select2();

这会为您提供禁用的select2输入。

简单地重新启用:

$('#statusSelect').select2('destroy');
$('#statusSelect').prop('disabled', false);
$('#statusSelect').select2();

不利的一面是,当select2被销毁并重新应用时,这会导致您的选择框在瞬间改变外观。

此外,旧版本的select2不支持“只读”和“禁用”。

答案 2 :(得分:5)

您可能遇到了select2错误1104。不幸的是,它仍然是IE8-10中的一个问题,但它不是select2的错。问题是IE在禁用元素时不会触发propertychange事件,也不会实现其他浏览器使用的MutationObserver功能。幸运的是,我编写了一个小的jQuery插件,允许在禁用元素时触发propertychange事件。你可以找到它here

$('#originalSelect').fireOnDisable().select2();
$('#originalSelect').prop('disabled', true);

现在应该在IE8-10中运行。如果你需要支持IE6-7,那就是你自己了!

答案 3 :(得分:2)

如果您有select2下拉框的唯一ID,请使用该ID

$("#id-select2").attr("disabled", true);

答案 4 :(得分:1)

对于IE,您必须在启用/禁用

后重新初始化select2
// change action disable
$('.custom-select').select2()
.on("change", function(e) {
   $('.custom-select').prop("disabled", true).select2(); //call select2
})

// disable alternative
 $('.custom-select').prop("disabled", true).select2(); //call select2

答案 5 :(得分:0)

你不需要这个:

$('#depts')。prop('disabled',false);

this question

相同

答案 6 :(得分:0)

如果有人试图在.net服务器代码中执行此操作:

this.mySelect2elementID.Attributes.Add("disabled", "true");

答案 7 :(得分:0)

此代码应适用于所有浏览器(select2 v4.0.4):

要停用:

$('select').prop('disabled', true).trigger('change');

启用:

$('select').prop('disabled', false).trigger('change');