web-dev-qa-db-fra.com

Existe-t-il un moyen de vérifier si un élément a déjà appliqué jquery select2?

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?

26
leora

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"))

57
semirturgay

Solution de travail:

$('.MyDripdowns:not([class^="select2"])').each(function (i, obj) {
    $(obj).select2({width: "455px"});
})

Liens:

  1. ^ = l'attribut commence par le sélecteur
  2. : pas de sélecteur
2
userlond

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 
    }
}
0
DaxeshVora