Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
45
rated 0 times [  51] [ 6]  / answers: 1 / hits: 106884  / 9 Years ago, wed, july 29, 2015, 12:00:00

I have 4 select boxes, when I change the first one do some stuff like empty, append and SET the new value for the next one.



Because I use select2 just can set it using $.select2('val','value');



Just that command trigger the change event on the other select and do cascade of changes.



Notice that .empty() and append() wont trigger (and i like that), even .val() should not trigger it, but when ure using select2 you can't access the new val using that.



Code here:



function anidado(selectorOrigen,selectorDestino) {
id = selectorOrigen;
alert(id);
destino = #+selectorDestino;
valor = $('#'+id).find(:selected).val();
$.ajax({
method: GET,
url: blanco2.php,
data: { select: id, valor: valor }
})
.done(function( msg ) {
obj = $.parseJSON( msg );
if (obj.length>0) {
$(destino).empty().append('<option value=x>Select an ---</option>').select2(val, x);
$.each(obj,function(index) {
valor = obj[index].codigo;
texto = obj[index].descripcion;
$(destino).append('<option value=' + valor + '>' + texto + '</option>');
$(destino).prop(readonly,false);

});
} else {
$(destino).empty().append('<option value=></option>').select2(val, );
}

});
return false;
}

$( select ).change(function() {
selectorOrigen = this.id;
if (selectorOrigen === 'pais') {
selectorDestino = 'ua';
} else if (selectorOrigen === 'ua') {
selectorDestino = 'unidad';
} else if (selectorOrigen === 'unidad') {
selectorDestino = 'rol';
} else if (selectorOrigen === 'rol') {
selectorDestino = 'categoria';
} else { return false; }
anidado(selectorOrigen,selectorDestino);
});


This was a pretty one but it did not work for me Clear select2 without triggering change event



He suggest use something like



$docInput.select2('data', null, false);


I just need set the new selected option without trigger the change event. Any alternative to .select2(val, x) while using select2 plugin?


More From » jquery

 Answers
13

select2 4.0 requires the standard .val() attribute of the underlying element to be called when changing the value. Details of this can be seen at the bottom of the select 4.0 announcement at https://select2.github.io/announcements-4.0.html.



To select the value you should use:



//Select value without triggering change event
$(destino).val('x');

//Select value and trigger change event
$(destino).val(x).trigger(change)


Please note, due to the way options are being appended you must re-initialize select2 first to ensure the value is selected. i.e.



//Re-initialize and set value without triggering change event
$(destino).select2();
$(destino).val('x');


Please see the following fiddle for a working example https://jsfiddle.net/wfkxdjr6/.


[#65634] Monday, July 27, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
aidan

Total Points: 72
Total Questions: 95
Total Answers: 121

Location: Uzbekistan
Member since Sat, Feb 27, 2021
3 Years ago
aidan questions
Mon, Oct 11, 21, 00:00, 3 Years ago
Wed, Sep 29, 21, 00:00, 3 Years ago
Sun, Sep 5, 21, 00:00, 3 Years ago
Thu, Jan 16, 20, 00:00, 4 Years ago
;