Il semble que select2 4 ouvre par défaut la liste déroulante lors de la suppression de l'élément actuellement sélectionné. Les versions précédentes de select2 ne semblaient pas avoir ce comportement et j'essaye de le réaliser mais pas de chance pour l'instant.
Quelqu'un sait-il comment se connecter à l'événement clear pour 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, la prévention des événements ne semble pas fonctionner pour une raison quelconque, vous pouvez donc 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();
}
});
Veuillez vous référer à Github pour la même chose.
Empêcher select2: ouvert lors de la suppression 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 Option
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 mise en œuvre 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);
});