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. #21
    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
    D'après la méthode de psychadelic , ça me retourne le message "TypeError: ul.target is undefined"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function test(elm) {
    var ul = document.getElementById('maliste');
     
    	ul.onclick = function(){
    	  if (ul.target.matches('li[data-value]')) {
    		  ul.target.dataset.value;
    	  }
    	 }}

  2. #22
    Invité
    Invité(e)
    Par défaut
    Tu ne vois pas qu'il manque une apostrophe ?

  3. #23
    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
    non c'est une erreur de frappe sur le forum...

  4. #24
    Invité
    Invité(e)
    Par défaut
    Bon...
    Vu que tu n'apportes pas plus d'explications...

    Pour récupérer l'INDEX du <li> cliqué :
    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)">0</li>
       <li data-value="456" onclick="test(this)">1</li>
       <li data-value="789" onclick="test(this)">2</li>
       <li data-value="000" onclick="test(this)">3</li>
      </ul>

    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
    // ---------
    function test(elt)
    {
      // 1- VALEUR
      var val = elt.dataset.value; // récupération du data-value
      console.log( val );
     
      // 2- INDEX
      var index = getNodeindex(elt);
      console.log( index );
    }
    // ---------
    // Récupérer l'INDEX d'un élément (noeud)
    function getNodeindex( elt ){ 
      var c = elt.parentNode.children, i = 0;
      for(; i < c.length; i++ ){
        if( c[i] == elt ) return i;
      }
    }
    // ---------
    Dernière modification par ProgElecT ; 29/04/2020 à 19h22.

  5. #25
    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
    Citation Envoyé par dominos Voir le message
    D'après la méthode de psychadelic , ça me retourne le message "TypeError: ul.target is undefined"
    [CODE]
    function test(elm) {
    var ul = document.getElementById('maliste');
    ....
    mauvaise retranscription de ma fonction fléchée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const   ListeUL = document.getElementById('maliste');
     
    ListeUL.onclick = function(event) {
       if (event.target.matches('li[data-value]')) {
         eventl.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

  6. #26
    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 infiniment pour vos nombreux exemples, j'ai finalement opté pour un mixte de ce qui me semble être le plus simple...

    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)">0</li>
     <li data-value="456" onclick="test(this)">1</li>
     <li data-value="789" onclick="test(this)">2</li>
     <li data-value="000" onclick="test(this)">3</li>
    </ul>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function test(elm) {
    	var ul = document.getElementById('maliste');
    	ul.onclick = function(){
    	    var li_val = elm.dataset.value;
    	    console.log( li_val );
        }
    }
    Remerciements, bonne journée !

  7. #27
    Invité
    Invité(e)
    Par défaut
    Un onclick dans une fonction appelé... par onclick...
    C'est n'importe quoi......
    Dernière modification par Invité ; 30/04/2020 à 07h44.

  8. #28
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const   ListeUL = document.getElementById('maliste');
     
    ListeUL.onclick = function(event) {
       if (event.target.matches('li[data-value]')) {
         event.target.dataset.value;
      }
    }
    Parfait !

  9. #29
    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 jreaux62 Voir le message
    Un onclick dans une fonction appelé... par onclick...
    C'est n'importe quoi......


    J'abandonne...
    Je ne comprends pas trop... onclick intercepte l'évènement non ?

  10. #30
    Invité
    Invité(e)
    Par défaut
    Tu as conscience que tu nous as menés en bateau, avec ta "fonction test()", et tes INDICES, qui au final, ne servent à rien ???


    Et pour la prochaine fois, tu sauras qu'il s'agit ici de "délégation d'évènement" :


    Oh ! Surprise ! Le 1er exemple est QUASIMENT LE MÊME que le tien !

    [...]
    • Lorsque l'on souhaite associer des événements similaires à différents éléments.
    Par exemple, imaginons que l'on souhaite afficher un texte initialement masqué en cliquant sur des items d'une liste ordonnée. Plutôt que de définir autant d'événement que d'éléments dans la liste, on pourra n'en utiliser qu'un seul placé sur la balise <ul>
    [...]
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <ul id="maListe"> 
        <li class="element" data-texte="foo">Item 1</li> 
        <li class="element" data-texte="bar">Item 2</li> 
        <li class="element" data-texte="baz">Item 3</li> 
        <li class="element" data-texte="toto">Item 4</li> 
        <li class="element" data-texte="titi">Item 5</li> 
        <li class="element" data-texte="tata">Item 6</li> 
        <li>Item 7</li> 
        <li>Item 8</li> 
        <li>Item 9</li> 
        <li class="element" data-texte="42">Item 10</li> 
    </ul>
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    document.getElementById('maListe').addEventListener('click', function(e){ 
        var initElem = e.target; 
        if(initElem.className != 'element'){ // Si l'élément n'est pas un de ceux à traiter 
            return; 
        } 
        alert(initElem.dataset.texte); 
    });
    C'est DINGUE, non ?
    Dernière modification par Invité ; 29/04/2020 à 16h05.

  11. #31
    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
    Citation Envoyé par dominos Voir le message
    Je ne comprends pas trop... onclick intercepte l'évènement non ?

    oui mais toi tu l’utilise en double
    une fois sur chaque element li <li data-value="123" onclick="test(this)" > 0 </li>et une autre fois sur dans ta fonction test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function test(elm) {
     /.../
       ul.onclick = function(){
    ....
    «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

  12. #32
    Invité
    Invité(e)
    Par défaut
    Juste pour info...

    En syntaxe jQuery, ça s'écrit simplement :

    Code jQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('#maliste').on('click', 'li', function() {
         var valeur = $(this).data('value');
    });

    Mais c'est très bien (voire MIEUX) de savoir le faire en JavaScript pur !

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    document.getElementById('maliste').addEventListener('click', function(e){
      var valeur = e.target.dataset.value;
      console.log(valeur);
    });

  13. #33
    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
    C'est parfait ! merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function test(elm) {
    	var ul = document.getElementById("maliste");
    	ul.addEventListener('click', function(e){
    	    console.log( e.target.dataset.value );
    	});
    }
    Ps: pour le bateau... j'aimerais bien, surtout en cette période de confinement...

  14. #34
    Invité
    Invité(e)
    Par défaut
    Non, mais c'est encore et toujours n'importe quoi...
    Ce n'est pas possible, tu le fait exprès ?

    SÉRIEUX... MONTRE LE CODE HTML de la liste !

    Je t'ai donné LA SYNTAXE CORRECTE dans mon précédent message !

    Raccourcis clavier :
    • COPIER : "Ctrl" + "C"
    • COLLER : "Ctrl" + "V"
    Dernière modification par Invité ; 29/04/2020 à 16h37.

  15. #35
    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
    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>

    Pa bon ?

    le elm dans la fonction me sert à autre chose, il est nécessaire....

    en tout cas merci pour l'équivalent en jquery, c'est plus simple.

  16. #36
    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
    Citation Envoyé par dominos Voir le message
    C'est parfait ! merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function test(elm) ....
    mais pourquoi tu t’acharne à vouloir garder cette fonction test ?

    Elle est completement inutile!
    il faut simplement placer tes éléménts LI <li data-value="123" >aaa</li> (pris dans mon code) ici il n'y a pas de fonction test
    «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

  17. #37
    Invité
    Invité(e)
    Par défaut
    @psychadelic
    Je pense que dominos ne sait pas faire de copier-coller...


    @dominos
    Est-ce qu'au moins tu livres des pizzas ??

  18. #38
    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
    Elle m'est nécessaire, car j'ai d'autres choses rattachés dessus. Bonne journée ! Merci encore.

  19. #39
    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 jreaux62 Voir le message
    @psychadelic
    Je pense que dominos ne sait pas faire de copier-coller...


    @dominos
    Est-ce qu'au moins tu livres des pizzas ??
    Maj+Suppr / Maj+Inser (Humour!)

  20. #40
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dominos Voir le message
    le elm dans la fonction me sert à autre chose, il est nécessaire....
    Ce elm est égal à e.target !!! (en JS pur) ou à $(this) (en jQuery)

    SÉRIEUX !! FAIS UN EFFORT POUR COMPRENDRE le code qu'on te donne !!!
    VA RESPIRER et t'aérer la tête !! (à la fenêtre)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    document.getElementById('maliste').addEventListener('click', function(e){
         var elm = e.target;
         var valeur = elm.dataset.value;
         console.log(valeur);
         // SUITE DE TON CODE ......
     
    });
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $('#maliste').on('click', 'li', function() {
         var elm = $(this);
         var valeur = elm.data('value');
         console.log(valeur);
         // SUITE DE TON CODE ......
     
    });
    N.B. Rassure-toi : je ne suis pas du tout "fâché".
    C'est juste "théatral" !

    Cela dit, les sont mérités !
    • tu sembles incapable de copier-coller les codes (HTML + JS) qu'on te donne, pour les TESTER !
    • sans compter que tu nous y a fait passer la journée... (40 messages... pour une simple "délégation" )
    Dernière modification par Invité ; 29/04/2020 à 16h44.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 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