IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Créer et remplir dynamiquement des select


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut Créer et remplir dynamiquement des select
    Bonsoir à tous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    Un ID doit être unique.

    Si la fonction addselect est exécutée plus d'une fois ce n'est plus le cas : $('<div/>',{id:'localisation','class':'row'}).

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Effectivement, cette div n'est créée qu'une seule fois. En fait mon problème c'est sur les select créés après ce div. Si vous avez testé, vous remarquerez que l'avant dernier select après div#localisation se vide et ses options se retrouvent plutôt dans le dernier select. Je ne sais si c'est à ce niveau le problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('<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));
    }
    Merci d'avance...

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Personne pour me venir en aide ?

Discussions similaires

  1. [2.x] Actualiser dynamiquement des select dans un template
    Par BarbicheIMA dans le forum Symfony
    Réponses: 3
    Dernier message: 21/07/2014, 13h35
  2. Créer un formulaire avec des selections automatiques
    Par doberman60 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/11/2012, 08h00
  3. "Remplir" dynamiquement des checkBox ?
    Par lolymeupy dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 24/10/2008, 14h25
  4. Créer une GUI et insérer dynamiquement des objets
    Par nix74 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 25/11/2006, 09h04
  5. remplir dynamiquement un SELECT (pb sous firefox)
    Par ould dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/11/2005, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo