Je souhaite appliquer select2 à un groupe d’éléments jquery de la page qui portent tous le même nom de classe, mais il semble que j’appelle select2 () sur un élément ayant déjà été appelé par select2 () ça explose. voici mon code
$('.MyDropdowns').each(function (i, obj) {
$(obj).select2({ width: "455px" });
});
donc je veux quelque chose comme:
$('.MyDripdowns').each(function (i, obj) {
if (!$(obj).HasSelect2Initiatized)
{
$(obj).select2({ width: "455px" });
}
});
Est-ce que quelque chose comme ça existe?
vous pouvez vérifier si l'élément a l'attribut select2
$('.MyDripdowns').each(function (i, obj) {
if (!$(obj).data('select2'))
{
$(obj).select2({ width: "455px" });
}
});
MODIFIER
Comme @ Fr0zenFyr a déclaré dans son commentaire pour la v4.0, vous pouvez utiliser:
if (!$(obj).hasClass("select2-hidden-accessible"))
Solution de travail:
$('.MyDripdowns:not([class^="select2"])').each(function (i, obj) {
$(obj).select2({width: "455px"});
})
Liens:
La réponse ci-dessus est presque correcte.
Mais cela crée un problème lorsque nous ajoutons des éléments de manière dynamique sur la même page et appliquons select 2 au nouvel élément créé.
À ce moment-là, le sélecteur doit être spécifié en utilisant non seulement la classe mais également le type d'entrée. Code de référence PFB.
$('inputp[type="text"].MyDripdowns').each(curr_idx, curr_elem){
//Check if select 2 is already applied or not
if($(curr_elem).hasClass('.select2-offscreen')){
//Select 2 is already applied to this element
}
else{
//Apply Select 2 to this element
}
}