J'ai une sélection secondaire asservie à une sélection principale (choisissez un magasin, puis un département - identique à un pays, puis un État).
Je ne peux absolument pas utiliser les méthodes de select2 ('enable', false) et ('data', null), quel que soit le code que j'arrache.
<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
Donc je suis obligé de faire ceci:
$('select#depts').empty(); // clears HTML element
$('#depts').select2(); // re-enhances select w/ select2
$('#depts').select2('disable',true); // disables
Il se comporte dans jsfiddle, donc je ne peux même pas poster un exemple et demander de l'aide. Je suis juste ... perplexe.
// to disable
$('#statusSelect').select2('disable');
//to enable
$('#statusSelect').select2('enable');
Cela fonctionne pour moi dans tous les navigateurs:
$('#statusSelect').select2('destroy');
$('#statusSelect').prop('disabled', true);
$('#statusSelect').select2();
Cela vous donne une entrée select2 désactivée.
Pour réactiver simplement:
$('#statusSelect').select2('destroy');
$('#statusSelect').prop('disabled', false);
$('#statusSelect').select2();
L'inconvénient est que cela entraîne que votre boîte de sélection change d'apparence pendant une fraction de seconde lorsque select2 est détruit et réappliqué.
En outre, "readonly" et "disabled" ne sont pas pris en charge dans les anciennes versions de select2.
Vous rencontrez probablement le bogue select2 1104 . Malheureusement, c'est toujours un problème dans IE8-10, mais ce n'est pas la faute de select2. Le problème est que IE ne déclenche pas l'événement propertychange lorsqu'un élément est désactivé et n'implémente pas non plus la fonctionnalité MutationObserver utilisée par les autres navigateurs. Heureusement, il existe un minuscule plug-in jQuery que j'ai écrit qui permettra à l'événement propertychange d'être déclenché lorsqu'un élément est désactivé. Vous pouvez le trouver ici .
$('#originalSelect').fireOnDisable().select2();
$('#originalSelect').prop('disabled', true);
devrait maintenant fonctionner dans IE8-10. Si vous avez besoin de supporter IE6-7, vous êtes autonome!
Si vous avez un identifiant unique pour la liste déroulante select2, utilisez cet identifiant,
$("#id-select2").attr("disabled", true);
Pour IE vous devez réinitialiser select2 après activer/désactiver
// 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
Ce code devrait fonctionner dans tous les navigateurs (select2 v4.0.4):
Pour désactiver:
$('select').prop('disabled', true).trigger('change');
Autoriser:
$('select').prop('disabled', false).trigger('change');
Si quelqu'un essaie de le faire en code de serveur .net:
this.mySelect2elementID.Attributes.Add("disabled", "true");