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

JavaScript Discussion :

Copier une liste <select> à l'identique


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut Copier une liste <select> à l'identique
    Bonjour,

    je pense que mon problème fait appel à de l'AJAX, à moins que je ne me complique pour rien (et ça ce serait gentil de me le dire ).

    J'ai un formulaire avec plusieurs listes déroulantes, alimentées par le nom de sociétés provenant de la base de données. Chaque liste correspond à une catégorie différente.

    Ex :
    Assureur - <select></select> "+"
    Installateur - <select></select> "+"
    [...]

    A côté de ces listes, j'ai un bouton "+" associé. Lorsque l'on clique dessus, j'aimerai faire apparaître juste en dessous de ma liste, la même liste avec le même nom de catégorie.

    Ex :
    Assureur - <select></select> "+" > je clique et ça affiche :

    Assureur - <select></select>

    Donc j'aurai deux fois la même liste, et je pourrai sélectionner une autre société appartenant à la même catégorie.

    J'ai pensé au fait qu'il y avait les listes à choix multiples, mais esthétiquement parlant sur ma page, ça ne ferait pas terrible.
    C'est pourquoi je cherche une autre solution !

    J'ai donc commencé par créer une ligne avec le nom de ma catégorie, et la liste déroulante des sociétés, puis le bouton + :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $nomcat = $catsoc['nom_categorie_societe'];
    $idcat = $catsoc['id_categorie_societe'];
    echo '<tr>';
    echo '<td>'.$nomcat.'</td>
    	<td><select name="'.$idcat.'">
    			<option value="0-0">Sélectionnez une société</option>';
    			$req = mysql_query("SELECT id_societe, nom_societe FROM societe ORDER BY nom_societe ASC;");
    			while ($donnees = mysql_fetch_array($req))
    			{
    				echo '<option value="'.$donnees['id_societe'].'-'.$donnees['nom_societe'].'"'. $selected.'>'.$donnees['nom_societe'].'</option>';
    			}
    			echo '</select></td><td>';
    			echo '<input type="button" name="add" value="+" onclick="add_soc('.$idcat.$nomcat.');"/></td></tr>';
    Juste en dessous je me suis dit qu'il fallait créer un div pour afficher la nouvelle liste déroulante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<tr><td><div id="div'.$idcat.$nomcat.'" style="display:none;"></div></td></tr>';
    Et ma fonction add_soc() appelée sur le onClick du bouton + :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function add_soc(id)
    {
    	document.getElementById('div'+id).style.display = 'block';
    	document.getElementById('div'+id).innerHTML = '<select name="'+id+'"><option></option></select>';
    }
    Et pour le moment ça s'arrête ici. Je pensais ensuite faire appel à une requête Ajax pour remplir ma liste déroulante, mais ça me ferait créer encore un div à l'intérieur de celui ci ?

    J'ai l'impression que ça va faire beaucoup de choses en fait tout ça pour recopier un élément.
    D'autant plus qu'à ce stade là, j'ai cette erreur qui s'affiche :
    missing ) after argument list
    [Break on this error] add_soc(45assureur);
    Donc est-ce que je pars dans la bonne direction ? Est-ce que je me complique beaucoup trop ?
    Un peu d'aide serait la bienvenue ^^

  2. #2
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Si c'est juste pour copier exactement la liste, utilises plutot un cloneNode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var laListeACopier = document.getElementById("lIdDeLaListeACopier")
    var laDivOuAjouterLaListe = document.getElementById("lIdDeLaDivOuAjouterLaListe")
    laDivOuAjouterLaListe.appendChild(laListeACopier.cloneNode(true)

  3. #3
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    J'ai utilisé ta solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo '<input type="button" name="add" value="+" onclick="add_soc('.$idcat.');"/></td></tr>';
    echo '<tr><td><div id="div'.$idcat.'" style="display:none;"></div></td></tr>';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function add_soc(id)
    {
    	var laListeACopier = document.getElementById(id)
    	var laDivOuAjouterLaListe = document.getElementById("div"+id)
    	laDivOuAjouterLaListe.appendChild(laListeACopier.cloneNode(true)
    }
    Dès l'entrée sur la page j'ai cette erreur :
    missing ) after argument list
    et ça me retourne cette erreur une fois testé :
    add_soc is not defined
    function onclick(event) { add_soc(45); }
    Ce qui signifie que la fonction n'existe pas ?

  4. #4
    Membre Expert Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Par défaut
    Oui ^^

  5. #5
    Membre éclairé Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Par défaut
    Mais euuuuh, si elle est bien déclarée dans mon code, pourquoi qu'il me dit ça firebug ? Oo

    Dès que j'ouvre la page j'ai cette erreur :
    missing ) after argument list
    [Break on this error] laDivOuAjouterLaListe.appendChild(laListeACopier.cloneNode(true);\n
    EDIT : ben oui forcément ... x) et si je veux récupérer le nom de ma catégorie en plus ? Est-ce que je peux faire : add_soc(id,nom) puis ensuite faire deux appendchild ?

    EDIT 2 :
    j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function add_soc(id,nom)
    {
    	document.getElementById("div"+id).style.display = 'block';
    	var laListeACopier = document.getElementById(id);
    	var leTdACopier = document.getElementById(nom);
    	var laDivOuAjouterLaListe = document.getElementById("div"+id);
    	laDivOuAjouterLaListe.appendChild(leTdACopier.cloneNode(true));
    	laDivOuAjouterLaListe.appendChild(laListeACopier.cloneNode(true));
    }
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<input type="button" name="add" value="+" onclick="add_soc('.$idcat,$nomcat.');"/></td></tr>';
    mais j'ai toujours cette erreur de parenthèse manquante, sauf que là je n'arrive pas à voir où :/ (et pour mettre id,nom dans ma fonction je sais pas trop comment faire non plus)

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    Citation Envoyé par baggie Voir le message
    mais j'ai toujours cette erreur de parenthèse manquante,
    la syntaxe étant correcte à présent, ça peut être un problème de cache

    => CTRL + F5 ?

    A+

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Par défaut
    ...Parce que tu as oublié une fin de parenthèse

    ...(true))

Discussions similaires

  1. Pb de mise en forme dans une liste de selection
    Par crashyear dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2006, 11h58
  2. rafraichir une page sur une liste de selection
    Par klimero dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 20/07/2006, 15h52
  3. Réponses: 12
    Dernier message: 02/05/2006, 19h37
  4. gerer une liste de selection multiple
    Par lapinours dans le forum Access
    Réponses: 5
    Dernier message: 10/04/2006, 12h21

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