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

jQuery Discussion :

Récupérer la ligne et la cellule cliquées


Sujet :

jQuery

  1. #1
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut Récupérer la ligne et la cellule cliquées
    Bonjour

    j'ai un tableau dont les lignes ont été remplis par une boucle php/twig. Jusque là tout va bien.
    Les cellules que je souhaite rendre cliquable possède la classe selectable.

    Je voudrais que lorsqu'on clique sur une de ces cellules, on récupère des infos qui appartiennent à la ligne mais aussi le nom de la colonne auquelle appartient la cellule.

    j'arrive à récupérer les champs d'une ligne (mais toute la ligne est cliquable) et je n'arrive pas à récupérer le nom du champs.
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $(document).ready(function () {
                $("tr").click(function () {
                    //on récupère la ligne sélectionnée
                    var ligne = $(this);
     
     
     
                        selectLine(ligne);
     
     
                })
            })


    Toutes les cellules d'une colonne portent la même classe.


    J'espère que j'ai été clair.

  2. #2
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut récupérer le nom du champs cliqué
    J'ai une partie de ma solution, mais je n'arrive toujours pas à récupérer le nom de la colonne du champs cliqué

    La j'ai bien les valeurs de la ligne qui m'intéressent, mais pas le nom de la cellule cliquée.

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $("tr").click(function () {
                    //L'index permet de récupérer le contenu de la cellule de la ligne
                        var anneeTest = $(this).find("td").eq(0).html(); 
                        var moisTest = $(this).find("td").eq(1).html();
     
                        selectLine(anneeTest, moisTest);
     
                })

  3. #3
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Essaye avec un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $("tr").click(function (event ) {
                    //L'index permet de récupérer le contenu de la cellule de la ligne
                        var anneeTest = $(this).find("td").eq(0).html(); 
                        var moisTest = $(this).find("td").eq(1).html();
                        var clickedCell=$(event.target);
                        console.log(clickedCell.text();
     
                        selectLine(anneeTest, moisTest);
    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 !

  4. #4
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut
    Je suis intrigué par ce qu'il me dit si je fais

    Code JS : 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
     
    $(document).ready(function () {
                $("tr").click(function (event) {
                    //L'index permet de récupérer le contenu de la cellule de la ligne
                        var annee = $(this).find("td").eq(0).html();
                        var mois = $(this).find("td").eq(1).html();
     
     
                        var cell = $(event.target);
                        var cellSelect = cell.getAttribute('selectable');
                        console.log(cellSelect);
     
     
    //                    if(cell.classList.contains("selectable")){
                            selectLine(annee, mois);
    //                    }
     
     
                })
            })

    Pour cell.getAttribute : il me dit que ce n'est pas une fonction

    et si je test le if ... il me dit que cell est indefini
    mais j'ai bien var cell = $(event.target)

    Si je comprends bien il ne sais pas qu'elle est la cellule cliquée donc il n'est pas capable de me donner son attribut.

  5. #5
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut click moyennement efficace
    Par contre avec
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $("td").click(function () {
                            var cell = $(this).attr('class');
                            console.log(cell);
                        })

    Il arrive bien à me trouver les classes de ma cellule MAIS que SI je fais 2 ou 3 cliques la première fois ... mais après il fonctionne dès le premier clique.

    C'est comme s'il avait un retard à l'allumage.

  6. #6
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut Il reste mon retard à l'allumage
    Bon ça y est, presque, j'ai bien mes classes de la cellule cliquée et seul les cellules avec la classe selectable sont cliquables.

    Code JS : 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
     
    $(document).ready(function () {
                $("tr").click(function (event) {
                    //L'index permet de récupérer le contenu de la cellule de la ligne
                    var annee = $(this).find("td").eq(0).html();
                    var mois = $(this).find("td").eq(1).html();
     
     
                    $("td").click(function () {
                        var cell = $(this).attr('class');
                        console.log(cell); //retourne bien les classes de ma cellule sélectionnée
     
                        if($("td").hasClass("selectable")){
                            console.log("clique ok");
                        }
                    })
                })
            })

    mais il me reste mon retard à l'allumage ...
    et à envoyer le nom de la classe de ma cellule

  7. #7
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    c'est pourtant si simple, en simple javascript...

    Code HTML : 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
    29
    30
    31
    32
    33
    <!DOCTYPE html>
    <html lang="fr">
    head>
      <meta charset="UTF-8">
      <title>Tableau JS</title>
      <style>
         td { border:1px solid grey; width: 2em; text-align: center; cursor: pointer; }
         td:hover { background-color: cadetblue; }  
      </style>
    </head>
    <body>
      <table id="maTable">
        <tbody>
          <tr> <td>a</td> <td>b</td> <td>c</td> <td>d</td> </tr>
          <tr> <td>e</td> <td>f</td> <td>g</td> <td>h</td> </tr>
          <tr> <td>i</td> <td>j</td> <td>k</td> <td>l</td> </tr>
          <tr> <td>m</td> <td>n</td> <td>o</td> <td>p</td> </tr>
        </tbody>
      </table>
      <p id="info">cliquer sur une case...</p>
    <script>
      maTable.onclick=e=>
        {
        if (!e.target.matches('td')) return
     
        let eTD = e.target
          , eTR = eTD.parentNode
          ;
        info.textContent = `Ligne= ${eTR.rowIndex}, colonne= ${eTD.cellIndex}, contenu= ${eTD.textContent}`
        }
    </script>
    </body>
    </html>

  8. #8
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut Pas de javascript récent
    Alors je ne peux pas utiliser de JS récent. L'appli est ancienne et elle n'aime pas les => dans je JS.
    C'est pourquoi j'utilise le vieux jquery de l'appli.

    j'ai essayé de traduire ce qui donne ça
    Code JS : 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
     
    $("table").click(function (event) {
                    if (!event.target.matches('td')) {
     
                        var eTD = e.target;
                        var eTR = eTD.parentNode;
     
    //                info.textContent = `Ligne= ${eTR.rowIndex}, colonne= ${eTD.cellIndex}, contenu= ${eTD.textContent};`
     
                        var ligne = eTR.rowIndex;
                        var colonne = eTD.cellIndex;
     
                        console.log("ligne : " + ligne);
                        console.log("colonne : " + colonne);
     
     
                    }
     
                })

    Et je n'ai pas la prétention d'avoir écris correctement, mais écris comme ça, ça ne marche pas

  9. #9
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    c'est étrange, normalement quand un truc marche pas sur une machine , on a un message d'erreur dans la console du navigateur....

  10. #10
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut ben oui
    Ben oui je sais qu'il devrait dire quelque chose mais il ne me dit rien.

    J'ai aussi modifié le event, mais ça ne viens pas de là

    d'ailleurs je viens de réaliser, je n'ai pas de id sur mes cellules, seulement des classes ...
    car le tableau est construit dans une boucle PHP/TWIG.

    Désolé de ne pas avoir tiqué tout de suite mais ça fait plusieurs jours que je suis dessus

  11. #11
    Membre extrêmement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $("table tbody").on("click","td", (function ()
      {
      var eTD     = this
        , eTR     = eTD.parentNode
        , ligne   = eTR.rowIndex
        , colonne = eTD.cellIndex
        ;
      console.log( "ligne : " + ligne)  ;
      console.log( "colonne : " + colonne );
      }))

  12. #12
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut Numéro de ligne et de cellule
    Je te remercie, parce que ça en l'état ça marche.
    J'ai bien le numéro de ma ligne et celui de la cellule (en numérotation tableau donc depuis 0).

    Ce n'est pas tout à fait ce que je cherchais mais cela me donne une idée pour m'en sortir.

    En plus ça a réglé mon problème de double clique.

    Encore merci à toi, j'essaie de régler mon problème de variable et je passe en résolu.

    Encore merci.

  13. #13
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut pas une fonction ?
    pourquoi il me dit que eTD.hasClass n'est pas une fonction ?
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(eTD.hasClass("selectable")){
                        console.log("clique Page ok");
                        selectLine();
                    }

  14. #14
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    elle est interprétée ou et quand cette ligne de code ?
    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 !

  15. #15
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 523
    Par défaut
    Salut,

    Parce que eTD n'est pas un objet jQuery, essaies de mettre :

  16. #16
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    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 !

  17. #17
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut OUPs
    Oui oups, c'est ça ...

    JE tiens ABSOLUMENT à vous remercier tous les deux pour votre patience.

    Au cas où je mets le code pour avoir certaines cellules cliquables et récupérer certaines infos de la ligne et le nom de la cellule (en fait j'utilise juste le numéro de la colonne et je lui réattribue un nom == celui qui sera demandé dans ma requête sql).
    A mettre dans une balise script
    Code JS : 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
     
            $(document).ready(function () {
                $("table tbody").on("click","td", (function ()
                {
     
                    var eTD     = this,
                        eTR     = eTD.parentNode,
                        ligne   = eTR.rowIndex,
                        colonne = eTD.cellIndex,
                        classCellule = eTD.className;
     
                    console.log( "ligne : " + ligne)  ;
                    console.log( "colonne : " + colonne );
                    console.log( "nomCellule : " + classCellule );
     
                    if($(eTD).hasClass("selectable")){
                        console.log("clique Page ok");
                        selectLine(ligne,colonne);
                    }
     
                }))
            })

    C'est bête mais il faut penser à mettre aussi cette balise pour que cela fonctionne
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <script type="text/javascript" src="{{ base_url() }}/js/tableGestion.js"></script>

    et la fonction js dans le fichier tableGestion
    Code JS : 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
    29
    30
    31
     
    function selectLine(ligne,colonne){
        // on n'a récupéré que l'année et le mois
        var annee = $("tr").eq(ligne).find("td").eq(0).html();
        var mois = $("tr").eq(ligne).find("td").eq(1).html();
     
     
        // on n'a récupéré que l'année et le mois
        console.log(annee);
        console.log(mois);
        console.log("clique Fonction ok");
     
        switch (colonne){
            case 2:
                var acronyme = "tous";
                break;
            case 3:
                var acronyme = "Nb_ADR0";
                break;
            case 4:
                var acronyme = "Nb_ADRPC";
                break;
            case 5:
                var acronyme = "Nb_ADRVOIE";
                break;
            case 6:
                var acronyme = "Nb_ADRCOMP";
                break;
        }
     
        console.log(acronyme);

    Encore merci ... je pense sincèrement que j'y serai encore sans vous.

  18. #18
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    Bonjour,
    si je peux me permettre, visiblement oui, lorsque l'on utilise jQuery on code jQuery on mixe le moins possible c'est une question de cohérence dans le code, sa lecture donc sa maintenance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $("#id-table td").on("click", function () {
      const $parent = $(this).parent();
      const tabText = [];
      $parent.children(".selectable").each(function () {
        tabText.push($(this).text());
      });
      console.log(tabText);
    });
    sous réserve des noms de classe !

  19. #19
    Membre confirmé
    Femme Profil pro
    student
    Inscrit en
    Janvier 2019
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : student

    Informations forums :
    Inscription : Janvier 2019
    Messages : 66
    Par défaut amélioration
    Ok, je vais changer ça.

    Mais au moins, j'ai une base qui fonctionne donc je sais un peu plus où aller.

    Je ne maîtrise pas jquery et javascript, et l'appli utilise les 2, alors ça ne facilite pas ma compréhension.

    Encore merci pour la remarque

  20. #20
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    Je rajoutes que jQuery regorge de méthodes utiles comme par exemple : La trop méconnue méthode index()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    console.log("(1)", $parent.children("td").index($(this)));
    // encore plus direct
    console.log("(2)", $(this).index());

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

Discussions similaires

  1. [XL-2010] Récupérer la ligne d'un bouton cliqué
    Par Thugann dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/03/2015, 11h01
  2. Réponses: 1
    Dernier message: 21/08/2011, 08h01
  3. [QtGui] Récupérer la ligne contenant le bouton cliqué
    Par Jiyuu dans le forum PyQt
    Réponses: 2
    Dernier message: 30/06/2011, 13h20
  4. Problème EXCEL : Récupérer la ligne d'une cellule active
    Par Kok1k1du dans le forum C++Builder
    Réponses: 10
    Dernier message: 17/11/2008, 12h04
  5. Réponses: 9
    Dernier message: 09/03/2007, 20h44

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