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 :

[DOM] Formulaire dynamique : affichage conditionnel de champs


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut [DOM] Formulaire dynamique : affichage conditionnel de champs
    Bonjour,

    J'ai un formulaire que je dois rendre dynamique : par exemple, une certaine valeur dans une liste déroulante doit faire apparaître de nouveaux champs, ou bien la réponse à une liste déroulante 1 change les valeurs possibles pour une liste déroulante 2.

    Quelle est la meilleure façon de faire cela? Je peux m'en sortir avec du javascript seul ou je dois utiliser de l'ajax?

    Merci d'avance pour votre aide!

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Points : 234
    Points
    234
    Par défaut
    et encore plus dynamique (avec très peu d'ajax, même moi qui n'y connaissait rien en ajax/javascript j'ai réussi rapidement à le mettre en place à ma sauce) : http://siddh.developpez.com/articles/ajax/#LIV-A

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    Merci pour le lien vers la FAQ, je cherchais justement un tuto du style.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 171
    Points : 91
    Points
    91
    Par défaut
    En fait j'ai pas tout à fait trouvé ce que je cherchais.
    Mon formulaire est sous la forme d'un tableau. J'ai une question "Avez-vous une voiture?" qui selon la réponse, affiche ou non 4 questions supplémentaires ("quel modèle?", "quel marque?"...).

    Je pourrais mettre un simple onChange sur ma combobox, mais j'ai un problème avec ca à l'initialisation du formulaire. En effet, dans le cas d'une modification (et non d'une nouvelle saisie) mes champs sont initialisés automatiquement à la valeur enregistrée, mais même si la réponse à la question "Avez-vous une voiture?" est "non", les questions supplémentaires sont tout de même affichées. Je voudrais qu'à l'initialisation, les questions soient masquées ou affichées selon le oui/non (et donc même s'il n'y a pas eu d'évenement onChange). Vous voyez ce que je veux dire?

    De plus, les questions supplémentaires occupent chacune une ligne du tableau. Je voudrais les mettre dans un bloc commun pour le faire apparaitre/disparaître selon la réponse au oui/non. J'ai essayé un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <table>
    <tr><td>Avez-vous une voiture?</td><td>...</td></tr>
    <div id= "mes_questions_supplementaires">
    <tr><td>Quel modèle?</td><td>...</td></tr>
    <tr><td>Quelle couleur?</td><td>...</td></tr>
    <tr>...</tr>
    </div>
    </table>
    et dans mon JS, je faisais un Element.hide('mes_questions_supplementaires');, mais ca ne marchait pas donc visiblement on ne peut pas procéder comme ca. Vous avez une idée pour ce 2ème pb?

    Merci

  6. #6
    Membre actif
    Inscrit en
    Mars 2004
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 290
    Points : 217
    Points
    217
    Par défaut
    Bonsoir,

    je vois que tu parles de Element.hide, donc je suppose que tu utilises le framework prototype. Donc voici un bout de code pour ajouter via DOM des lignes tr dans un tableau.

    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
     
    function creer_dans_tableau() {
    				var my_tr,my_td;
     
    				my_tr=document.createElement('tr');
    				Element.writeAttribute(my_tr,'id','marque');
    				Element.insert('voiture',{after: my_tr });// insertion dans le body
     
    				my_td=document.createElement('td');
    				Element.update(my_td,'Quelle marque ?');
    				my_tr.appendChild(my_td);
     
    				my_td=document.createElement('td');
    				Element.update(my_td,'...');
    				my_tr.appendChild(my_td);
    				//2ème ligne rajoutée
    				my_tr=document.createElement('tr');
    				Element.writeAttribute(my_tr,'id','modele');
    				Element.insert('voiture',{after: my_tr });// insertion dans le body
     
    				my_td=document.createElement('td');
    				Element.update(my_td,'Quelle modèle ?');
    				my_tr.appendChild(my_td);
     
    				my_td=document.createElement('td');
    				Element.update(my_td,'...');
    				my_tr.appendChild(my_td);
    			}
    dans le body :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <table id='bloc1'>
    			<tr id='voiture'><td>Avez-vous une voiture?</td><td>...</td></tr>
    			<tr><td>ligne1c1</td><td>ligne1c2</td></tr>
    			<tr><td>ligne2c1</td><td>ligne2c2</td></tr>
    		</table>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [IP-2010] Affichage conditionnel et champs obligatoires
    Par faplanier dans le forum InfoPath
    Réponses: 1
    Dernier message: 01/11/2013, 11h23
  2. [MySQL] Formulaire : champs à affichage conditionnel
    Par plorton dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 30/08/2011, 12h10
  3. Réponses: 1
    Dernier message: 20/06/2011, 16h50
  4. Réponses: 7
    Dernier message: 20/04/2006, 11h33
  5. nom d'un champs de formulaire dynamique
    Par wil4linux dans le forum ASP
    Réponses: 2
    Dernier message: 22/09/2005, 17h42

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