Désactiver l’ouverture du menu déroulant sur select2 clear

Semble que select2 4 ouvre par défaut la liste déroulante lors de la suppression de l’élément sélectionné. Les versions précédentes de select2 ne semblaient pas avoir ce comportement et j’essaie de le réaliser mais pas de chance pour le moment.

Est-ce que quelqu’un sait comment se connecter à l’événement clear afin que nous puissions désactiver son comportement par défaut et effacer l’option sélectionnée sans ouvrir la liste déroulante?

À la vôtre, Al

Peut confirmer, empêcher les événements semble ne pas fonctionner pour une raison quelconque, de sorte que vous pouvez simplement fermer la liste déroulante après un certain délai:

 $("select").select2({ allowClear: true }).on("select2:unselecting", function(e) { $(this).data('state', 'unselected'); }).on("select2:open", function(e) { if ($(this).data('state') === 'unselected') { $(this).removeData('state'); var self = $(this); setTimeout(function() { self.select2('close'); }, 1); } }); 

Voici un violon qui fonctionne: http://jsfiddle.net/obq3yLf2/

Vous n’avez pas besoin d’un délai d’attente pour que cela fonctionne, voici mon exemple:

 $('#my-select').select2({ allowClear: true }).on('select2:unselecting', function() { $(this).data('unselecting', true); }).on('select2:opening', function(e) { if ($(this).data('unselecting')) { $(this).removeData('unselecting'); e.preventDefault(); } }); 

S’il vous plaît se référer à Github pour les mêmes.

Prevent select2: ouvert lors de l’effacement de la sélection

De là, j’ai énuméré les réponses fournies.

1 option

 $('#select-id').on('select2:unselecting', function() { var opts = $(this).data('select2').options; opts.set('disabled', true); setTimeout(function() { opts.set('disabled', false); }, 1); }); 

2 options

 var $el = $('#select-id'); $el.on('select2:unselecting', function(e) { $el.data('unselecting', true); }).on('select2:open', function(e) { // note the open event is important if ($el.data('unselecting')) { $el.removeData('unselecting'); // you need to unset this before close $el.select2('close'); } }); 

Une autre implémentation simple:

  $('select').on('select2:unselect', function(evt) { $(this).select2({ placeholder : { id : '', text : '---None Selected---' }, allowClear : true, theme : "bootstrap" }).select2('close'); }); 

J’ai eu un problème avec un court délai après avoir désélectionné l’un des éléments et cette solution a résolu ce problème pour moi:

 $(this).select2({ multiple: 'multiple', }).on("select2:unselecting", function(e) { var self = $(this); setTimeout(function() { self.select2('close'); }, 0); });