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 :

check box pour affichage dans un formulaire multiple


Sujet :

JavaScript

  1. #1
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut check box pour affichage dans un formulaire multiple
    bonjour

    j'ai un formulaire généré par un for each.
    dans celui ci une check box qui doit afficher une fenêtre cachée quand le check box est 'checked'
    cela fonctionne bien dans un formulaire unique mais je ne sais pas comment affecter les différents id des check box dans le JS j'ai essayé ça.
    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
    function alerte(test1){
     
     
    	if (document.getElementById("alerte_comp['<?=$id;?>']" ).checked == true) {
     
     
    		document.getElementById('message[<?=$id;?>]').style.visibility="visible";
     
    	}
     
    	if (document.getElementById("alerte_comp[<?=$id;?>]" ).checked == false) {
     
            document.getElementById('message[<?=$id;?>]').style.visibility="hidden";
     
    }
    }
    source de la page
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <!--alerte prod -->
          <input type="checkbox" name="alerte[]" id="alerte_comp[34164]" checked='checked' onClick='alerte(this.checked)' />Besoin de compl&eacute;ment d'infos.<br>
    <font style='visibility: hidden' id='message[34164]'>
     
        message
        <textarea class="contenurush" name="message[]">
                message d'alerte</textarea>
        </font>

    et code PHP
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     <!--alerte prod -->
          <input type="checkbox" name="alerte[]" id="alerte_comp[<?php echo $id ?>]" <?php echo $checked?> onClick='alerte(this.checked)' />Besoin de compl&eacute;ment d'infos.<br>
    <font style='visibility: hidden' id='message[<?php echo $id ?>]'>
     
        message
        <textarea class="contenurush" name="message[]">
                <?php  echo $message;?></textarea>
        </font>

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Bonjour,

    - Les crochets dans les ID et les name, à éviter
    - Les ID ne sont pas le seul moyen d'identifier un élément ! Quand il y en a plusieurs qui remplissent la même fonction, tu peux utiliser des classes ou te référer au tag et aux éléments parents.
    - Si ton textarea se trouve toujours après ta checkbox, tu n'as peut-être pas besoin de les nommer explicitement. Tu pourrais l'atteindre avec input.nextSibling par exemple, ou encore input.parent.lastChild
    One Web to rule them all

  3. #3
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    Merci Sylvain

    Mais je suis nul en JS et ton explication n'est pas de mon niveau je crois
    je crois que j'ai besoin de plus d'explication.
    Les crochets des noms sont là pour récupérer ce formulaire dans un array après l'envoi pour faire un update dans la base.
    donc si je n'identifie pas les éléments par un ID comment puis je faire pour les identifier dans une liste générée dynamiquement?

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    Tu peux filtré sur une partie de l'id :
    Exemple avec JQuery :
    http://api.jquery.com/attribute-starts-with-selector/

    Après tu crée ton event au niveau de tes input, via un filtre du genre. Tu pourra retrouver l'identifiant complet lors du déclanchement de l'event
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    désolé mais je ne comprend rien au code suggéré.
    Je ne comprend pas comment ça fonctionne puisque je ne vois rien dans la partie démo.
    Je vais avoir besoin de quelques explications de texte, ou de code plus exactement.

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Il existe un tas de solutions pour récupérer un élément HTML du document en Javascript. Tu utilises les ID avec document.getElementById, mais il y a aussi :
    - document.querySelector(All)
    - document.getElementsByName
    - document.getElementsByTagName
    et à partir d'un élément, il existe tout un tas de propriétés et méthodes pour naviguer dans le DOM : parentNode, childNodes, previousSibling, nextSibling, firstChild, lastChild...

    Donc plutôt que de nommer chaque textarea avec un ID, tu pourrais dire à ta fonction alerte de chercher le prochain <textarea> après cet élément. Si tu les places toujours au même endroit dans le DOM, aucun souci.
    One Web to rule them all

  7. #7
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    Autant pour moi, j'ai mal lu le problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($('#quicknav').is(':visible')){$('#quicknav').hide();}else{$('#quicknav').show();}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(document.getElementById('quicknav').style.visibility == 'hidden'){document.getElementById('quicknav').style.visibility = '';}else{document.getElementById('quicknav').style.visibility = 'hidden';}
    Ce qui donne dans ton exemple :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <!--alerte prod -->
          <input type="checkbox" name="alerte[]" id="alerte_comp_34164" checked='checked' onClick="if(document.getElementById('message_34164').style.visibility == 'hidden'){document.getElementById('message_34164').style.visibility = '';}else{document.getElementById('message_34164').style.visibility = 'hidden';}"/>Besoin de compl&eacute;ment d'infos.<br>
    <font style='visibility: hidden' id='message_34164'>
     
        message
        <textarea class="contenurush" name="message[]">
                message d'alerte</textarea>
        </font>

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <!--alerte prod -->
          <input type="checkbox" name="alerte[]" id="alerte_comp_<?php echo $id ?>" <?php echo $checked?> onClick="if(document.getElementById('message_<?php echo $id ?>').style.visibility == 'hidden'){document.getElementById('message_<?php echo $id ?>').style.visibility = '';}else{document.getElementById('message_<?php echo $id ?>').style.visibility = 'hidden';}"/>Besoin de compl&eacute;ment d'infos.<br>
    <font style='visibility: hidden' id='message<?php echo $id ?>'>
     
        message
        <textarea class="contenurush" name="message[]">
                <?php  echo $message;?></textarea>
        </font>

    Tu peux aussi utiliser une fonction au lieu de redéfinir le traitement à chaque fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function displayMessageComplementaire(id){
    <div style="margin-left:40px">if(document.getElementById(id).style.visibility == 'hidden'){
    <div style="margin-left:40px">document.getElementById(id).style.visibility = '';</div>} else {
    <div style="margin-left:40px">document.getElementById(id).style.visibility = 'hidden';</div>}</div>}
    Et du coup faire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    onClick="displayMessageComplementaire('message_<?php echo $id ?>'"

    Cela fonctionnera. Tu pourrai faire un traitement plus générale. Mais tu verra ça plus tard.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

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

Discussions similaires

  1. Problème d'affichage dans un formulaire Access
    Par JohnDoeVS dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/03/2007, 06h57
  2. Affichage dans un formulaire de recherche
    Par Hellx dans le forum IHM
    Réponses: 4
    Dernier message: 23/02/2007, 12h02
  3. Probleme d'affichage dans le formulaire
    Par Pao82 dans le forum Access
    Réponses: 11
    Dernier message: 17/08/2006, 07h21
  4. Comment faire pour aligner dans un formulaire?
    Par Ludo75 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/03/2006, 09h50
  5. check box pour afficher autre chose
    Par vincent1412 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/02/2006, 17h47

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