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 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, поэтому я не могу даже отправить пример и запросить помощь. Я просто... в тупике.

Ответ 1

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

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

Ответ 2

Это работает для меня во всех браузерах:

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

Это дает вам отключенный вход select2.

Для повторной активации просто:

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

Нижняя сторона заключается в том, что это приводит к тому, что ваш поле выбора меняет внешний вид на долю секунды, когда select2 уничтожается и повторно применяется.

Кроме того, "readonly" и "disabled" не поддерживаются в более старых версиях select2.

Ответ 3

Вероятно, вы испытываете ошибку select2 1104. К сожалению, это все еще проблема в IE8-10, но это не select2 fault. Проблема в том, что IE не запускает событие propertychange, когда элемент отключен, а также не реализует функции MutationObserver, используемые другими браузерами. К счастью, там крошечный плагин jQuery, который я написал, позволит запустить событие propertychange, когда элемент отключен. Вы можете найти здесь здесь.

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

теперь должен работать в IE8-10. Если вам нужно поддерживать IE6-7, вы сами!

Ответ 4

Если у вас есть уникальный идентификатор для раскрывающегося окна select2, используя этот идентификатор,

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

Ответ 5

Для 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

Ответ 6

не требуется ли это:

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

так же, как этот вопрос

Ответ 7

Если кто-то пытается это сделать в коде сервера .net:

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