Lorsque j'utilise un select2 (entrée) en mode bootstrap, je ne peux rien y taper. C'est comme handicapé? En dehors du modal select2 fonctionne très bien.
Exemple de travail: http://jsfiddle.net/byJy8/1/ code:
<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Panel</h3>
</div>
<div class="modal-body" style="max-height: 800px">
<form class="form-horizontal">
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="vdn_number">Numer</label>
<div class="controls">
<!-- seleect2 -->
<input name="vdn_number" type="hidden" id="vdn_number" class="input-large" required="" />
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary">Save changes</button>
</div>
</div>
et js:
$("#vdn_number").select2({
placeholder: "00000",
minimumInputLength: 2,
ajax: {
url: "getAjaxData/",
dataType: 'json',
type: "POST",
data: function (term, page) {
return {
q: term, // search term
col: 'vdn'
};
},
results: function (data) { // parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to alter remote JSON data
return {results: data};
}
}
});
réponses:
Vous pouvez trouver une rapide solution
et voici «la bonne façon»: Select2 ne fonctionne pas lorsqu'il est intégré dans un modal bootstrap
dropdownParent
ne devrait pas être sur le div racine, mais plus profond, par exemple le div avec classemodal-content
, sinon les positions déroulantes sont gâchées lors du défilement du modal.Réponses:
Ok, je dois le faire fonctionner.
changement
à
(supprimer tabindex = "- 1" du modal)
la source
Pour Select2 v4:
Utilisez
dropdownParent
pour attacher la liste déroulante à la boîte de dialogue modale, plutôt qu'au corps HTML.Cela attachera la liste déroulante Select2 afin qu'elle tombe dans le DOM du modal plutôt que dans le corps HTML (par défaut). Voir https://select2.org/dropdown#dropdown-placement
la source
dropdownParent: $("#myModal")
, nondropdownParent: "#myModal"
.dropdownParent
à la racine du modal, il est en effet préférable de choisir le corps, sinon vous obtenez de très mauvais bugs de positionnement lors du défilement. J'ai mis le mien au div avec classemodal-content
et ça marche comme un charme!J'ai trouvé une solution à cela sur github pour select2
https://github.com/ivaynberg/select2/issues/1436
Pour bootstrap 3, la solution est:
Bootstrap 4 a renommé la
enforceFocus
méthode en_enforceFocus
, vous devrez donc le corriger à la place:Explication copiée à partir du lien ci-dessus:
la source
$.fn.modal.Constructor.prototype.enforceFocus = $.noop;
Il suffit de supprimer
tabindex="-1"
et d'ajouter du styleoverflow:hidden
Voici un exemple:
la source
Ceci est ma solution avec select2 4.0.0. Remplacez simplement le css juste en dessous de l'importation select2.css. Veuillez vous assurer que le z-index est supérieur à votre boîte de dialogue ou modal. J'ajoute juste 2000 sur ceux par défaut. Parce que le z-index de mes boîtes de dialogue est d'environ 1000.
la source
bootstrap.css
le z-index de.popover
1060, ce correctif fonctionne également. Je l'aime parce que c'est simple et qu'il résout le problème de la même manière que le problème a été créé: z-index défini dans une feuille de style.Définissez le menu déroulant Parent. Je devais le mettre sur .modal-content dans le modal ou le texte finirait centré.
la source
.modal-content
fait vraiment une différence. Merci d'avoir signalé 👍Réponse qui a fonctionné pour moi trouvée ici: https://github.com/select2/select2-bootstrap-theme/issues/41
Ne nécessite pas non plus la suppression du
tabindex
.la source
Selon la documentation officielle select2, ce problème se produit car les modaux Bootstrap ont tendance à voler le focus à d'autres éléments en dehors du modal.
Par défaut, Select2 attache le menu déroulant à l'élément et il est considéré comme "en dehors du modal".
Attachez plutôt la liste déroulante au modal lui-même avec le paramètre dropdownParent:
Voir référence: https://select2.org/troubleshooting/common-problems
la source
J'ai eu le même problème, la mise
z-index
à jour pour.select2-container
devrait faire l'affaire. Assurez-vous que votre modalz-index
est inférieur à celui de select2.Mise à jour: dans le cas où le code ci-dessus ne fonctionne pas correctement, supprimez également les tabindex de votre modal comme suggéré par @breq
la source
Utilisez ce code sur Document.read ()
la source
Ce problème n'a pas fonctionné pour moi Fonction Jquery unique
la source
changer le fichier select2.css
à
la source
Juste pour mieux comprendre comment les éléments tabindex fonctionnent pour compléter la réponse acceptée:
de: Mozilla Devlopper Network
la source
Si vous avez un problème avec le clavier de l' iPad qui masque le modal bootstrap en cliquant sur l' entrée select2 , vous pouvez résoudre ce problème en ajoutant la règle suivante après l'initialisation de l'
select2
entrée:Tiré de https://github.com/angular-ui/bootstrap/issues/1812#issuecomment-135119475
EDIT: Si vos options ne sont pas affichées correctement, vous devez utiliser l'
dropdownParent
attribut lors de l'initialisationselect2
:Bonne chance (:
la source
Sur la base de la réponse de @pymarco, j'ai écrit cette solution, elle n'est pas parfaite, mais résout le problème de la mise au point select2 et maintient la séquence d'onglets à l'intérieur du modal
la source
Dans mon cas, j'ai eu le même problème avec deux modaux et tout a été résolu en utilisant:
Comme dans le numéro 41 du projet, un utilisateur l'a dit.
la source
ce code fonctionne. Je vous remercie.
la source
D'accord, je sais que je suis en retard à la fête. Mais permettez-moi de partager avec vous ce qui a fonctionné pour moi. Les solutions tabindex et z-index ne fonctionnaient pas pour moi.
La définition du parent de l'élément select a fonctionné conformément aux problèmes courants répertoriés sur le site select2.
la source
Si vous utilisez jquery mobile popup, vous devez réécrire la fonction _handleDocumentFocusIn:
la source
J'ai le même problème avec le
select2
inbootstrap modal
, et la solution était de supprimer leoverflow-y: auto;
etoverflow: hidden
; de.modal-open
et.modal classes
Voici l'exemple d'utilisation
jQuery
pour supprimeroverflow-y
:la source
j'ai eu ce problème avant, j'utilise yii2 et je l'ai résolu de cette façon
la source
J'ai eu un problème semi-lié dans une application, donc je vais mettre mon 2c.
J'ai plusieurs modaux avec des formulaires contenant des widgets select2. L'ouverture du modal A, puis d'un autre modal à l'intérieur du modal A, ferait disparaître les widgets select2 à l'intérieur du modal B et ne réussirait pas à s'initialiser.
Chacun de ces modaux chargeait les formulaires via ajax.
La solution consistait à retirer les formulaires du dom lors de la fermeture d'un modal.
la source
la source
J'ai résolu cela généralement dans mon projet en surchargeant la
select2
fonction. Maintenant, il vérifiera s'il n'y a pas de dropdownParent et si la fonction est appelée sur un élément qui a un parent du typediv.modal
. Si c'est le cas, il ajoutera ce modal comme parent pour la liste déroulante.De cette façon, vous n'avez pas à le spécifier chaque fois que vous créez une boîte de sélection2.
la source
Je viens de le faire fonctionner en incluant select2.min.css
Essayez iy out
Mon html modal de bootstrap 3 est
la source
vous pouvez appeler à nouveau le déclencheur select2 dans votre $ (document)
la source
pour utiliser bootstrap 4.0 côté serveur (ajax ou json data inline), vous devez ajouter tout cela:
puis lorsque le modal est ouvert, créez le select2:
la source
Dans mon cas, je l'ai fait et cela fonctionne. J'utilise le bundle pour le charger et dans ce cas cela a fonctionné pour moi
la source