Créer et remplir dynamiquement des select
Bonsoir à tous.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| function addselect(service, parent, elt){
elt.nextAll().remove();
if ( elt.val() != '-1' ) {
$.ajax({
type: 'POST',
url: 'ajax.php',
data: 'serviceId='+service+'&parentId='+parent+'&structures=ok',
dataType: 'json',
cache: false,
beforeSend: function(){
$("<img/>",{src: "assets/img/ajax-loader.gif", id: "loader"}).insertAfter(elt);
},
complete: function(){
$("#loader").remove();
},
success: function(data){
if ( data.result.children.length > 0 ) {
var items = data.result.children, level = data.result.level;
if ( level > 0 ) {
$('<div/>',{id:'localisation','class':'row'}).insertAfter(elt);
}
if ( $('#localisation').length > 0 ) $('<select/>',{'class':'form-control'}).insertAfter('#localisation');
else $('<select/>',{'class':'form-control'}).insertAfter(elt);
$('<option/>',{value: '-1', html: 'Choisir une structure dans "' + elt.children('option:selected').text() + '"'}).appendTo($('#structuresWrap > select').eq(-1));
for(var i in items){
$("<option/>",{value: items[i].struc_id, html: items[i].struc_name}).appendTo($('#structuresWrap > select').eq(-1));
}
}
}
});
}
}
$('#structuresWrap').on('change', '> select', function() {
addselect($('input[type=radio][name=services]:checked').attr('value'), $(this).children('option:selected').attr('value'), $(this));
}); |
Ce code me permet de créer dynamiquement à la volée des select à partir d'un retour AJAX. Voir test en ligne ici : http://tamtam-networks.com/test/
Tout marche merveilleusement bien dans les services centraux. Essayez Centrax > Administration centrale > Secrétariat Générale, tout se passe bien.
Essayez : Déconcentrés > Délégation Régionale > Service des marchés d’infrastructures, vous constatez par vous même. Les contenus des 2 derniers select s'insèrent dans le dernier. Et c'est bout de code qui cause ce désastre
Code:
1 2 3
| if ( level > 0 ) {
$('<div/>',{id:'localisation','class':'row'}).insertAfter(elt);
} |
car var level > 0 pour les services déconcentrés.
Que faire ?
Merci d'avance pour votre aide.
NB. Merci de patienter les retours Ajax pour la création et chargement des select.