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 :

Suppression de ligne dans un tableau


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Points : 33
    Points
    33
    Par défaut Suppression de ligne dans un tableau
    Bonjour,

    je souhaite créer un tableau ayant un nombre de ligne non défini au départ : je créer par exemple un tableau avec 3 lignes, en dessous j'ai un bouton pour ajouter une ligne à la fin et sur chaque ligne j'ai un bouton permettant de supprimer celle-ci.

    Le souci est : comment supprimer les lignes?
    Si je génére mon code javascript, le onClick revient à mettre un deleteRow sur mon tableau avec le numéro de ligne mais si j'ai 5 lignes, j'aurais un truc comme ça :

    ligne1 (bouton supprimer ligne1)
    ligne2 (bouton supprimer ligne2)
    ligne3 (bouton supprimer ligne3)
    ligne4 (bouton supprimer ligne4)
    ligne5 (bouton supprimer ligne5)

    Imaginons que l'utilisateur clique pour supprimer la ligne 3, j'aurais ceci après la suppression :

    ligne1 (bouton supprimer ligne1)
    ligne2 (bouton supprimer ligne2)
    ligne3 (bouton supprimer ligne4)
    ligne4 (bouton supprimer ligne5)

    Donc si l'utilisateru veut ensuite supprimer la 3eme ligne, ça lui supprimera la 4eme et s'il veut supprimer la 4eme, ça génèrera une erreur...

    Comment faire donc ? Il doit y avoir une astuce, j'imagine ne pas être le premier à faire ça...


    Après je voudrais bouger mes lignes mais ça sera peut-être plus simple, je ne me suis pas encore penché sur la question...

  2. #2
    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
    la réponse est dans this

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="this.parentNode.removeChild(this)"
    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 !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    effectivement ce n'est pas bête...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    mais ça ne supprime que la cellule contenant le bouton de suppression, et non la ligne comme désiré...

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    Citation Envoyé par Dave Lopeur Voir le message
    mais ça ne supprime que la cellule contenant le bouton de suppression, et non la ligne comme désiré...
    il te faut dans ce cas remonter encore d'un cran
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onclick="this.parentNode.parentNode.removeChild(this)"

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    ça ne fonctionne pas non plus : j'ai l'erreur suivante "Erreur*: uncaught exception: [Exception... "Node was not found" code: "8" nsresult: "0x80530008 (NS_ERROR_DOM_NOT_FOUND_ERR)" location: ".../My%20Documents/test.html Line: 1"]" dans ma console d'erreur de FF.

    Je mets mon code au cas où :


    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
    21
    22
    23
    24
    25
    26
    27
    <html>
      <head></head>
      <body>
        <table>
          <tr>
            <td style="border:1px solid black">1</td>
            <td style="border:1px solid black">ligne 1</td>
            <td style="border:1px solid black"><a onClick="this.parentNode.parentNode.removeChild(this)">Suppr.<a></td>
          </tr>
          <tr>
            <td style="border:1px solid black">2</td>
            <td style="border:1px solid black">ligne 2</td>
            <td style="border:1px solid black"><a onClick="this.parentNode.parentNode.removeChild(this)">Suppr.<a></td>
          </tr>
          <tr>
            <td style="border:1px solid black">3</td>
            <td style="border:1px solid black">ligne 3</td>
            <td style="border:1px solid black"><a onClick="this.parentNode.parentNode.removeChild(this)">Suppr.<a></td>
          </tr>
          <tr>
            <td style="border:1px solid black">4</td>
            <td style="border:1px solid black">ligne 4</td>
            <td style="border:1px solid black"><a onClick="this.parentNode.parentNode.removeChild(this)">Suppr.<a></td>
          </tr>
        </table>
      </body>
    </html>

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    réponse un peu rapide, sans vraiment avoir compris le soucis.
    L'erreur est normale le this n'appartient pas au parentNode -2, vu le niveau d'imbrication il te faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a onclick="this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode)">Suppr.<a>
    si c'est pas clair dis le !!!!

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    colle des id avec un repère numérique à tes < tr > et < a >, ça évitera les commandes rocambolesques pour supprimer une ligne;

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    Merci cool, j'ai écrit mon code comme ça du coup, la fonction numerotation pourra être réutilisée lors de mon ajout de ligne :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <html>
     
      <head>
        <script>
          function delLigne(pObj) {
            pObj.parentNode.parentNode.parentNode.removeChild(pObj.parentNode.parentNode);
            numerotation();
          }
     
          function numerotation() {
            var tableau = document.getElementById('tableau');
            var trs = tableau.rows;
            var n = trs.length;
            var i;
     
            for (i=0; i<n; i++)  {
              trs[i].cells[0].innerHTML = trs[i].rowIndex + 1;
            }
          }
        </script>
      </head>
     
      <body>
        <table id="tableau">
          <tr>
            <td style="border:1px solid black">1</td>
            <td style="border:1px solid black">ligne 1</td>
            <td style="border:1px solid black"><a onClick="delLigne(this)">Suppr.<a></td>
          </tr>
          <tr>
            <td style="border:1px solid black">2</td>
            <td style="border:1px solid black">ligne 2</td>
            <td style="border:1px solid black"><a onClick="delLigne(this)">Suppr.<a></td>
          </tr>
          <tr>
            <td style="border:1px solid black">3</td>
            <td style="border:1px solid black">ligne 3</td>
            <td style="border:1px solid black"><a onClick="delLigne(this)">Suppr.<a></td>
          </tr>
          <tr>
            <td style="border:1px solid black">4</td>
            <td style="border:1px solid black">ligne 4</td>
            <td style="border:1px solid black"><a onClick="delLigne(this)">Suppr.<a></td>
          </tr>
        </table>
      </body>
    </html>

  11. #11
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Citation Envoyé par Dave Lopeur Voir le message
    Merci cool, j'ai écrit mon code comme ça du coup, la fonction numerotation pourra être réutilisée lors de mon ajout de ligne :
    Concernant la fonction de numérotation elle ne me parait pas judicieuse dans ton cas, je m'explique.
    la propriété rowIndex est fluctuante, si tu supprimes une ligne ayant pour rowIndex 4, par exemple, la ligne suivante prendra sa place donc son rowIndex, tu risques donc de te trouver avec des ID identiques.

    Concernant la suppression de la ligne, il faut faire plus générique pour éviter que si par mégarde tu insères un conteneur autour du lien il ne te faille rajouter un parentNode.

    exemple pour test:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <!DOCTYPE html>
    <html lang="fr">
    <html>
    <head>
    <script type="text/javascript">
    function removeLigne( obj){
      var oElem = obj.parentNode;
      while( oElem && oElem.tagName != 'TR'){
        oElem = oElem.parentNode;
      }
      if( oElem){
        alert( 'Ligne à détruire : ' +oElem.rowIndex +'\nparent :' +oElem.parentNode.tagName);
        oElem.parentNode.removeChild( oElem);
     
      }
      else{
        alert( 'le parent n\'est pas une TABLE');
      }
    }
    </script>
    </head>
    <body>
    <table>
      <tr><td onclick="removeLigne(this)">ligne 1</td></tr>
      <tr><td><div onclick="removeLigne(this)">ligne 2</div></td></tr>
      <tr><td><form><div onclick="removeLigne(this)">ligne 3</div></form></td></tr>
    </table>
    <div onclick="removeLigne(this)">autre ligne</div>
    </body>
    </html>

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

Discussions similaires

  1. [Débutant] Erreur lors de suppression de ligne dans un tableau
    Par Tiji78 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 06/02/2012, 10h51
  2. Probléme avec la suppression de ligne dans un tableau
    Par Tintou dans le forum VBA Word
    Réponses: 6
    Dernier message: 20/08/2009, 15h06
  3. [DOM] ajout suppression de ligne dans plusieurs tableau
    Par francojo dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/06/2008, 16h33
  4. Ajout/Suppression de ligne dans un tableau
    Par Nimothenicefish dans le forum WinDev
    Réponses: 2
    Dernier message: 14/02/2008, 11h56
  5. [Tableaux] Suppression de lignes dans un tableau
    Par lodan dans le forum Langage
    Réponses: 9
    Dernier message: 15/09/2006, 20h08

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