Dans mon formulaire, j'ai sélectionné 2 champs de sélection multiple dans lesquels je souhaite supprimer l'option sélectionnée de la liste déroulante après l'avoir sélectionnée et l'ajouter à la liste si elle est supprimée de la liste. De plus, les éléments ajoutés doivent être dans le même ordre que leur sélection. La sélection actuelle2 (4.0) ne supprime pas les éléments sélectionnés et affiche les éléments sélectionnés dans leur ordre d'apparition dans la liste déroulante et non dans leur ordre de sélection.
$(document).ready(function(){
$('#dynamicAttributes').select2({
allowClear: true,
minimumResultsForSearch: -1,
width: 600
});
});
JSFiddle: https://jsfiddle.net/rd62bhbm/
Partie n ° 1 de Q:
Vous pouvez faire un astuce CSS pour masquer selected item
comme ceci:
.select2-results__option[aria-selected=true] {
display: none;
}
Partie n ° 2 de Q:
Vous pouvez aussi faire un astuce JQuery pour forcer selected items
à la fin de la boîte de balises, (en sélectionnant l'élément sélectionné, le détache (le supprime), puis l'ajoute à la boîte de balises, puis appelle changer de fonction "pour appliquer les modifications)}:
$("select").on("select2:select", function (evt) {
var element = evt.params.data.element;
var $element = $(element);
$element.detach();
$(this).append($element);
$(this).trigger("change");
});
Enfin mise à jour JsFiddle , j'espère que cela fonctionne pour vous, merci!
Edit # 1
Vous pouvez Clear All Selected
par cet appel (appliquer les valeurs Null)} _:
$("#dynamicAttributes").val(null).trigger("change");
sur le bouton:
$('#btnReset').click(function() {
$("#dynamicAttributes").val(null).trigger("change");
});
Je trouve un moyen de faire en sorte que les valeurs sélectionnées n'apparaissent plus dans la liste déroulante de sélection
Sur la documentation, vous pouvez avoir la liste des événements Select2 events
open
Je me sers de ces événements select2 open pour masquer les valeurs sélectionnées
Voici le javascript ::
$(document).ready(function() {
$('#dynamicAttributes').select2({
allowClear: true,
minimumResultsForSearch: -1,
width: 600
});
// override the select2 open event
$('#dynamicAttributes').on('select2:open', function () {
// get values of selected option
var values = $(this).val();
// get the pop up selection
var pop_up_selection = $('.select2-results__options');
if (values != null ) {
// hide the selected values
pop_up_selection.find("li[aria-selected=true]").hide();
} else {
// show all the selection values
pop_up_selection.find("li[aria-selected=true]").show();
}
});
});
J'espère que ça aide.
ma solution a été modifiée le select2.js (le noyau, version 4.0.3) dans la ligne # 3158. Ajoutez la vérification suivante:
if ($option[0].selected == true) {
return;
}
Avec cette vérification, nous pouvons exclure de la liste déroulante ceux sélectionnés. Et si vous écrivez le nom d'une option sélectionnée, le texte de l'option "noResult" apparaît.
Voici le code complet:
SelectAdapter.prototype.query = function (params, callback) {
var data = [];
var self = this;
var $options = this.$element.children();
$options.each(function () {
var $option = $(this);
if (!$option.is('option') && !$option.is('optgroup') ) {
return;
}
if ($option[0].selected == true) {
return;
}
var option = self.item($option);
var matches = self.matches(params, option);
if (matches !== null) {
data.Push(matches);
}
});
callback({
results: data
});
};
$(document).ready(function(){
$('#dynamicAttributes').select2({
allowClear: true,
minimumResultsForSearch: -1,
width: 600
});
});
cela fait une erreur lorsque vous cliquez sur le bouton Supprimer le signe
TypeError: this.placeholder n'est pas défini
utilisation
$(document).ready(function(){
$('#dynamicAttributes').select2({
allowClear: true,
minimumResultsForSearch: -1,
width: 600,
placeholder: 'past your placeholder'
});
});