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 value d'un <li> sans id


Sujet :

JavaScript

  1. #1
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut Récupérer value d'un <li> sans id
    Bonsoir,

    Savez-vous s'il est possible de récupérer la valeur d'une balise <li> sans utiliser d'id, juste par le click sur l'élément.. du genre onclick="test(this)" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function test(elm) {
    	alert(document.getElementById(elm).getAttribute('value'));
    }
    d'avance merci pour votre réponse...

  2. #2
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    dans le langage HTML les éléments LI ne peuvent pas avoir d'attributs value.

    Sinon on peut retrouver le texte ou le code HTML qu'il contient en utilisant l'arborescence auquel il appartient.
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  3. #3
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    dans le langage HTML les éléments LI ne peuvent pas avoir d'attributs value.
    Pourtant ceci fonctionne :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ul><li id="test" value="456" onclick="test("test")"></li>...

    Ce que je cherche à savoir, c'est s'il est possible de récupérer cette valeur sans déclarer l'id... du genre :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ul><li value="456" onclick="test(this)"></li>...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function test(elm) {
    	alert(document.getElementById(elm).getAttribute('value'));
    }
    Merci d'avance pour votre réponse...

  4. #4
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 451
    Points : 4 600
    Points
    4 600
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    dans le langage HTML les éléments LI ne peuvent pas avoir d'attributs value.
    faux !
    developer.mozilla.org/fr/docs/Web/HTML/Element/li
    Attributs
    Cet élément inclut les attributs universels.
    value
    Cette valeur entière indique la valeur ordinale en cours de l'élément de liste tel que défini par l'élément <ol>. La seule valeur autorisée pour cet attribut est un nombre, même si la liste est affichée avec des chiffres romains ou des lettres. Les éléments de la liste qui suivent celui-ci continueront la numérotation à partir de la valeur indiquée. L'attribut value n'a pas de signification pour les listes non ordonnées (<ul>) ou pour les menus (<menu>).
    dans son cas, value n'a pas de signification pour sa liste, mais ca n'empeche qu'il peut tres bien s'en servir en JS

    la seule erreur est sa function test()
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function test(elm) {
    	alert(elm.getAttribute('value'));
    }
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Parfait !

  6. #6
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Juste une question subsidiaire... est-ce qu'il est possible de récupérer le value d'une balise <li> par l'id de la balise <ul> ? Un peu comme le fait un <select><option>... un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var ul = document.getElementById(id);
    alert(ul.firstElementChild.getAttribute('value'));

  7. #7
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Dans l'exemple suivant, ça retourne bien le value, sauf qu'il faut renseigner à la main l'element... ce que je cherche c'est de ne pas renseigner le numéro d'élément (en rouge dans le code...) et récupérer le value cliqué :


    var ul = document.getElementById('popo');
    alert(ul.getElementsByTagName('li')[2].getAttribute('value'));

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    il serait LARGEMENT préférable d'utiliser un attribut valable et conforme w3c …

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <ul><li id="test" data-value="456" onclick="test("test")"></li>…
    var ul = document.getElementById(id);
    console.log(ul.firstElementChild.getAttribute('data-value'));
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    merci pour la réponse, en fait, je cherche à récupérer le value des <li> cliqué par l'id du <ul> du genre... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(ul.getElementsByTagName('li')[e.target].getAttribute('value'));
    mais ça ne fonctionne pas c'est e.target qui semble ne pas être considéré...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    SUIS le conseil de SpaceFrog, et utilise un attribut data-*.

    Cela dit... on utilise dataset pour le récupérer :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ul>
      <li data-valeur="123" onclick="test(this);">blabla 1</li>
      <li data-valeur="456" onclick="test(this);">blabla 2</li>
    </ul>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function test(elt)
    {
      var li_val = elt.dataset.valeur;
      console.log( li_val );
    }
    N.B. J'ai mis volontairement "valeur", pour éviter de confondre avec l'attribut "value".
    Dernière modification par ProgElecT ; 29/04/2020 à 19h18.

  11. #11
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    ça me retourne "undefined"... ce que je cherche c'est à récupérer le numéro de l'élément cliqué dans une liste <ul id="maliste"><li></li>..., de 0 à n...


    ça fonctionne si je met un id dans chaque balise <li> en plus de l'id <ul> mais ce qui m'intéresse, c'est de savoir si on peut faire la même chose sans id <li> juste par en passant l'id de <ul>


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ul.getElementsByTagName('li')[elm.id].getAttribute('data-value'));
    pour le voir fonctionner, il faut attribuer l'id <li> à partir de 0, 1, etc.

    Comment récuperer ce numéro d'élement sans l'id du genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ul.getElementsByTagName('li')[elm.????].getAttribute('data-value'));

  12. #12
    Invité
    Invité(e)
    Par défaut
    • Montre un VRAI EXTRAIT du code HTML !
    • De plus, il faut un évènement pour déclencher l'action : click ? sur quoi ?

    Le code que j'ai donné précédemment fonctionne SANS id, avec une fonction test() !

  13. #13
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Ce code fonctionne, mais ce que je cherche à savoir c'est s'il est possible de se passer des id déclarés dans les balises <li> tout en conservant l'id déclaré dans <ul>...

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <ul id="maliste" class="dropdown-menu">
       <li id="0" data-value="123" onclick="test(this)"></li>
       <li id="1" data-value="456" onclick="test(this)"></li>
       <li id="2" data-value="789" onclick="test(this)"></li>
       <li id="3" data-value="000" onclick="test(this)"></li>
      </ul>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function test(elm) {
    	  var ul = document.getElementById(maliste');
    	 alert(ul.getElementsByTagName('li')[elm.id].getAttribute('data-value'));
    }

  14. #14
    Invité
    Invité(e)
    Par défaut
    1- Je t'ai donné la solution :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <ul id="maliste" class="dropdown-menu">
       <li data-value="123" onclick="test(this)"></li>
       <li data-value="456" onclick="test(this)"></li>
       <li data-value="789" onclick="test(this)"></li>
       <li data-value="000" onclick="test(this)"></li>
      </ul>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function test(elt)
    {
      var li_val = elt.dataset.value; // récupération du data-value
      console.log( li_val );
    }
    Fais un copier-coller !


    2- En voici une variante, AVEC id et SANS fonction test() :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ul id="maliste">
      <li data-valeur="123">blabla 1</li>
      <li data-valeur="456">blabla 2</li>
    </ul>
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    window.addEventListener("DOMContentLoaded", (event) => {
     
    const maliste_lis = document.querySelectorAll('#maliste li');
    maliste_lis.forEach(function(li){
      li.addEventListener('click',function(){
        var li_val = li.dataset.valeur;
     
        console.log( li_val );
      })
    })
     
    })

    3- Allons-y pour une 3ème solution :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      <ul id="maliste" class="dropdown-menu">
       <li onclick="test('123')">1</li>
       <li onclick="test('456')">2</li>
       <li onclick="test('789')">3</li>
       <li onclick="test('000')">4</li>
      </ul>
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function test(li_val)
    {
      console.log( li_val );
    }
    Dernière modification par Invité ; 29/04/2020 à 12h00.

  15. #15
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Ce que tu fais, revient à faire un elm.getAttribute('value')...

    ce qui m'interresse c'est de passer par l'id <ul id="maliste">... !

    Si tu as une solution, je suis dessus depuis ce matin

  16. #16
    Invité
    Invité(e)
    Par défaut
    C'est la variante (2-) que j'ai proposée...

    Je t'ai donné 3 solutions qui fonctionnent (et répondent, à priori, à ta problématique).
    Je ne vois pas ce que je peux faire de plus.


    Sinon, explique plus clairement, et dans son contexte, ce qui te pose problème.

  17. #17
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    merci, je crois que je vais rester avec mon id, la solution que tu proposes utilise une boucle, et j'ai aussi besoin d'une fonction...

  18. #18
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    well, ma doc n'est pas à jour, et bon, on peut utiliser l'attribut "value", mais sinon l'attribut data-XXX est bien sur mieux adapté et beaucoup moins ambiguë sur le plan sémantique. ;-)

    En fait j'ai l'impression qu'il recherche le mécanisme de délégation d'évenement en JS

    ça se code comme ça:

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <ul id="ma-liste" class="dropdown-menu">
      <li data-value="123" >aaa</li>
      <li data-value="456" >bbb</li>
      <li                  >ccc</li>
      <li data-value="000" >ddd</li>
    </ul>
     
    <div id="message-box">...</div>

    Code JAVASCRIPT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    const maListe = document.getElementById('ma-liste')
      ,   msgBox  = document.getElementById('message-box')
      ;
    msgBox.display = msg =>    // pour remplacer la commande alert()
      {
      msgBox.textContent = msg
      setTimeout(()=>{ msgBox.textContent = '...' }, 2000);  // 2 secondes d'affichage c'est l'argement suffisant ?
      }
    maListe.onclick = e =>   // récupere tout click effectué sur l'ensemble de la liste
      {
      if (!e.target.matches('li[data-value]')) return // on rejette tout ce qui ne correspond pas à cette condition
      msgBox.display ( e.target.dataset.value )
      }
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  19. #19
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Dans cette solution, l'index (partie en rouge) indique le premier <li>, 1= second, etc. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function test(elm) {
    	  var ul = document.getElementById('maliste');
    	 alert(ul.getElementsByTagName('li')[0].getAttribute('data-value'));
    }
    Est-il possible de récupéré le numéro de l'élément cliqué au lieu de 0 ?

  20. #20
    Invité
    Invité(e)
    Par défaut
    @psychadelic
    Citation Envoyé par psychadelic Voir le message
    ...et bon, on peut utiliser l'attribut "value"...
    Sémantiquement, ce n'est pas la bonne méthode.

    Balise <li> :
    Attributs

    value
    Cette valeur entière indique la valeur ordinale en cours de l'élément de liste tel que défini par l'élément <ol>.
    La seule valeur autorisée pour cet attribut est un nombre, même si la liste est affichée avec des chiffres romains ou des lettres.
    [...]
    On n'est donc pas censé y mettre n'importe quoi.


    @dominos
    SERIEUX ????
    Tu n'es pas capable de COPIER-COLLER les codes qu'on te propose pour les TESTER ???

    On n'a PAS BESOIN de cet INDEX pour récupérer la valeur !!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [MySQL] combobox récupérer value sans soumettre form
    Par claude77 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 30/01/2013, 13h45
  2. Récupérer le contenu généré de la page sans ob_
    Par Romalafrite dans le forum Langage
    Réponses: 1
    Dernier message: 19/10/2007, 13h51
  3. Réponses: 2
    Dernier message: 11/07/2007, 12h59
  4. récupérer value radiobouton
    Par Emcy dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/02/2007, 16h47
  5. Réponses: 6
    Dernier message: 15/06/2006, 14h07

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