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 :

Récupérer tous les id


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut Récupérer tous les id
    Bonjour, voilà mon problème. Je travaille sur symfony2 mais cela ne pose pas de problème pour la résolution de ma question.
    J'ai un fichier html dans lequel j'ai une boucle affichant un radio bouton puis un div.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {% if bib.livre %}
            Livre à éditer : </br>
                Référence du livre :
                    {% for livre in bib.livre %}
                        <input type="radio" name="livre_reference" value="{{livre.reference}}" onClick="AfficheSelection('{{livre.reference}}')"/> {{livre.reference}}
                        <div id="{{livre.reference}}">
                            Montant : {{livre.montant}} €
                        </div>
                        </br>
                    {% endfor %}
                </br>
        {% endif %}
    La question concerne bien le js de ma fonction AfficheSelection(selection).
    Cette fonction s'éxécute bien elle ne réalise pas ce que je souhaite. Je voudrais récupérer tous les id des div créés par ma boucle pour n'affiché que le montant du radio bouton coché.

    Voilà mon code js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function AfficheSelection (el)
    {
        document.getElementById(el).style.display = 'block';
        var allid = document.getElementByTagName('livre_reference');
        for(var i=0; i<tab.lenght; i++)
        {
            if(allid[i].id != el)
                document.getElementById(allid[i].id).style.display = 'none';
        }
    }

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementByTagName('livre_reference');

    Tu as des balises <livre_reference> dans ton HTML ?
    Et quand bien même ce serait le cas, getElementByTagName() n'existe pas !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut
    Merci de m'aider sur cette question.
    Comme tu as pu le voir non je n'ai pas de balise <livre_reference> dans mon code.
    j'ai remplacé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementByTagName('livre_reference');
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByName('livre_reference');
    mais sans résultat. J'ai testé de mettre un alert (allid) et il me répond object NodeList.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut
    Je viens de modifier mon code js et m'inspirant des foonctionnalités des NodeList que j'ai pu trouvé mais toujours aucun changement quand je clique sur un radiobouton. Cela viens du fait que je ne rentre pas dans ma boucle mais je ne comprends pas pourquoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function AfficheSelection (el)
    {
        document.getElementById(el).style.display = 'block';alert('coucou1');
        var allid = document.getElementsByName('chelem_reference');alert(allid);
        for(var i=0; i<allid.lenght; i++)
        {
            var node = allid.id(i);
            if(node != el)
                document.getElementById(node).style.display = 'none';
        }
    }

  5. #5
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    et si tu prenais la chose différemment

    dans ton code html si j'a bien vu tu as un input suivit d'un div

    la question que je me pose c'est pourquoi ?
    pourquoi créer tant de div pour n'en afficher qu'un seul ?

    supposons que tu n'a qu'un div
    lorsque tu clique sur un bouton radio il te suffit de changer son contenu pour voir le montant du bouton radio cliqué
    il n'est alors plus dut tout nécessaire de chercher tous les div mais un seul
    Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {% if bib.livre %}
            Livre à éditer : </br>
                Référence du livre :
                    {% for livre in bib.livre %}
                        <input type="radio" name="livre_reference" value="{{livre.reference}}" montant =" Montant : {{livre.montant}} €" onClick="AfficheSelection(this)"/> {{livre.reference}}
                        </br>
                    {% endfor %}
                        <div id="livre.reference" style="display:none;"/>
                </br>
        {% endif %}
    Dans ce cas tu as plein de tag input et un seul div
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function AfficheSelection (input)
    {
        var aDiv = document.getElementById("livre.reference");
        aDiv.style.display = 'block';
        aDiv.innerHTML = input.montant;
    }
    si besoin tu peut aussi repositionner le div

    A+JYT

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut
    Je ne comprends pas vraiment comment le montant peux s'afficher ou s'effacer dans ton exemple mais soit. Tout ceci est dans un formulaire. A la suite de cette affichage, j'ai une liste d'input (radio bouton) qui eux sont toujours les mêmes. Comment puis-je faire pour modifier seulement la partie composé du montant du livre lorsque je clique sur le radiobouton correspondant en laissant affiché la liste de radio bouton qui suit ?

  7. #7
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    c'est ce que fait la fonction js que je t'ai donné
    elle récupère le div et l'affiche
    puis elle modifie son contenu pour y placer le montant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function AfficheSelection (input)//reçoit en paramètre l'input cliqué onClick="AfficheSelection(this)"
    {
        var aDiv = document.getElementById("livre.reference"); //récupérer le div
        aDiv.style.display = 'block'; // le rendre visible
        aDiv.innerHTML = input.montant; //modifier son contenu
    }
    A+JYT

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut
    D'accord merci je comprends déjà mieux. Mon dernier souci est qu'avec le code html que tu m'as donnée, je ne peux pas créer le div puisque livre.reference n'est défini que dans la boucle. As-tu simplement inversé les 2 lignes ou est-ce un autre problème ?

  9. #9
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    le div est crée en dehors de la boucle pour qu'il y en ai qu'un seul
    A+JYT

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 181
    Par défaut
    D'accord. Le problème est que le div ne peut être construit puisqu'il ne connait pas livre.reference en dehors de la boucle.
    Voici l'erreur renvoyé : Variable "livre" does not exist in ...

  11. #11
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    livre.reference est un texte comme toto ou titi je n'ai pas mis de variable
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="livre.reference" style="display:none;"/>
    en non
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="{{livre.reference}}" style="display:none;"/>

    tu peux mettre le texte que tu veux il suffit de mettre le même dans le getElementById.

    A+JYT

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Le problème en fait, c'est que tu n'as pas lu (en tout cas pas appliqué) Important : Les règles incontournables d'utilisation de ce forum et que tu as posté ton code serveur et non le code HTML généré comme demandé...

    Cependant, avec le code fourni par sekaijin, tu peux t'en sortir très facilement...
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="radio" name="livre_reference" value="{{livre.reference}}" montant =" Montant : {{livre.montant}} €" onClick="AfficheSelection(this)"/> {{livre.reference}}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function AfficheSelection (input){ //reçoit en paramètre l'input cliqué onClick="AfficheSelection(this)"
        var aDiv = document.getElementById(input.value); //récupérer le div
        aDiv.style.display = 'block'; // le rendre visible
        aDiv.innerHTML = input.montant; //modifier son contenu
    }
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Discussions similaires

  1. [RegEx] Récupérer tous les liens d'une page
    Par micatmidog dans le forum Langage
    Réponses: 13
    Dernier message: 03/11/2006, 01h37
  2. Parcourir un répertoire et récupérer tous les fichiers
    Par Sniper94-2 dans le forum Windows
    Réponses: 6
    Dernier message: 08/09/2005, 01h23
  3. Récupérer tous les champs de même nom
    Par hlr dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/02/2005, 13h26
  4. Réponses: 7
    Dernier message: 08/01/2005, 13h24
  5. [Plugin] Récupérer tous les fichiers *.java d'un workspace
    Par Satch dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 02/06/2004, 12h51

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