我有一个辅助选择从属于主要选择(选择一个商店,然后选择一个部门 - 选择一个国家,然后选择一个州)。
无论我撕掉多少其他代码,我绝对无法使用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中表现得很好,所以我甚至无法发布示例并请求帮助。我只是......难倒。
答案 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)
答案 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');