私はプライマリセレクトに従属しているセカンダリセレクトを持っています(ストアを選択してから、部門を選択します-国を選択するのと同じで、次に州を選択します)。
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で動作するため、例を投稿してヘルプを要求することもできません。私はただ…困惑しています。
// to disable
$('#statusSelect').select2('disable');
//to enable
$('#statusSelect').select2('enable');
これはすべてのブラウザで動作します:
$('#statusSelect').select2('destroy');
$('#statusSelect').prop('disabled', true);
$('#statusSelect').select2();
これにより、select2入力が無効になります。
単純に再度有効にするには:
$('#statusSelect').select2('destroy');
$('#statusSelect').prop('disabled', false);
$('#statusSelect').select2();
欠点は、select2が破棄されて再適用されたときに、選択ボックスの外観が一瞬変化することです。
また、「readonly」と「disabled」は、select2の古いバージョンではサポートされていません。
おそらくselect2バグ 1104 が発生しています。残念ながら、それはIE8-10でもまだ問題ですが、select2のせいではありません。問題は、IEは、要素が無効になっているときにpropertychangeイベントをトリガーせず、他のブラウザーが使用するMutationObserver機能も実装しないことです。幸い、私が使用する小さなjQueryプラグインがあります。要素が無効になったときにpropertychangeイベントを発生させることができると書いてあります here を見つけることができます。
$('#originalSelect').fireOnDisable().select2();
$('#originalSelect').prop('disabled', true);
iE8-10で動作するはずです。 IE6-7をサポートする必要がある場合は、自分で解決してください。
Select2ドロップダウンボックスに一意のIDがある場合、そのIDを使用して、
$("#id-select2").attr("disabled", true);
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
このコードは、すべてのブラウザー(select2 v4.0.4)で動作するはずです。
無効にする場合:
$('select').prop('disabled', true).trigger('change');
有効にするには:
$('select').prop('disabled', false).trigger('change');
誰かが.netサーバーコードでそれをやろうとしている場合:
this.mySelect2elementID.Attributes.Add("disabled", "true");