J’ai quelques multisélect et j’utilise jquery select2.Je veux désactiver une option dans d’autres multisélect lorsque cette option est sélectionnée dans un multisélect. J’écris ce code, mais ça marche.
$("select.multiselect").on("change", function(e) { if(e.added){ for(var i=0;i<this.options.length;i++){ var vals = $(this).select2("val"); for(var j=0;j<vals.length;j++){ if(this.options[i].value===vals[j]){ this.options[i].selected=true; } } }; } if(e.removed){ for(var i=0;i<this.options.length;i++){ if(this.options[i].value===e.removed.id){ this.options[i].selected=false; } }; } });
comment faire?
C’était plus compliqué que je ne le pensais mais voici ce que j’ai trouvé:
$('select.multiselect').on('change', function(e) { // the selected values var vals = $(this).select2("val"); // selects contains all the OTHER select forms var selects = $('select').not('#'+$(this).attr('id')); // loop trough all the selects for (var i = 0; i < selects.length; i++) { //re-enable all options before $(selects[i]).find('option').removeAttr('disabled'); // loop trough all the values for (var j = 0; j < vals.length; j++) { // disabled attribute $(selects[i]).find('option[value='+vals[j]+']').attr('disabled', 'disabled'); } } });
Voici un violon si vous voulez voir le résultat en action
Assurez-vous que tous vos éléments select
ont un id
unique.