Reputation: 196679
I want to apply select2 to a bunch of jquery elements on the page that all have the same class name but it looks like if i call select2() on an element that already has had a select2() called on it then it blows up. here is my code
$('.MyDropdowns').each(function (i, obj) {
$(obj).select2({ width: "455px" });
});
so I want something like:
$('.MyDripdowns').each(function (i, obj) {
if (!$(obj).HasSelect2Initiatized)
{
$(obj).select2({ width: "455px" });
}
});
Does anything like this exist?
Upvotes: 53
Views: 63969
Reputation: 3
...
curSelect.on( 'change', function() {
curLength = curSelect.select2( 'data' ).length;
if ( curLength ... ) {
...
}
} );
Upvotes: 0
Reputation: 619
Above answer is almost correct.
But it creates problem when we are adding elements dynamically on same page and applying select 2 to newly created element.
At that times selector has to be specified using not only class but also with input type. PFB reference code.
$('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
}
}
Upvotes: 1
Reputation: 4201
you can check if the element has select2
attribute
$('.MyDripdowns').each(function (i, obj) {
if (!$(obj).data('select2'))
{
$(obj).select2({ width: "455px" });
}
});
EDIT
As @Fr0zenFyr said in his comment for v4.0 you can use :
if (!$(obj).hasClass("select2-hidden-accessible"))
Upvotes: 107
Reputation: 3828
Working solution:
$('.MyDripdowns:not([class^="select2"])').each(function (i, obj) {
$(obj).select2({width: "455px"});
})
Links:
Upvotes: 3