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 :

Remplacer une ligne de tableau par une autre


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Remplacer une ligne de tableau par une autre
    Bonjour,

    Je cherche à afficher/masquer des lignes de tableau HTML. En fait à remplacer une ligne affichée par une autre. Mon code est le suivant :

    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
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <script>
    function cache(idElement) {
    	document.getElementById(idElement).style.display = "none";
    	document.getElementById(idElement).style.visibility="hidden";
    }
     
    function affiche(idElement) {
    	document.getElementById(idElement).style.display = "block";
    	document.getElementById(idElement).style.visibility="visible";
    }
    </script>
    <body>
    <table border="1">
    <tr><td>0</td><td>&nbsp;</td></tr>
    <tr id="ligne1"><td>1</td><td><input type="button" onclick="affiche('ligne2');cache('ligne1');"></td></tr>
    <tr id="ligne2" style="display:none;visibility:hidden;"><td>2</td><td><input type="button" onclick="affiche('ligne1');cache('ligne2');"></td></tr>
    <tr id="ligne3"><td>3</td><td><input type="button" onclick="affiche('ligne4');cache('ligne3');"></td></tr>
    <tr id="ligne4" style="display:none;visibility:hidden;"><td>4</td><td><input type="button" onclick="affiche('ligne3');cache('ligne4');"></td></tr>
    </table>
    <br>
    </body>
    </html>
    Ça ne fonctionne pas correctement sous Firefox et Chrome et je ne comprends pas pourquoi : les deux <td> de mon <tr> sont fusionnés en un seul au moment de l'affichage.
    Pire : ça fonctionne correctement sous IE8 ce qui me fend le coeur...

    Pourriez-vous m'aider ?

  2. #2
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Dans la fonction affiche, essaie d'assigner une chaine vide plutot que "block" à l'élément : il reprendra alors sa valeur par défaut, ce qui permet d'éviter des surprises de mise en page à cause d'éléments inline à qui on attribuerait un display:block...

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  3. #3
    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 : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Le display par défaut d'un tr n'est pas block mais table-row, d'où l'erreur d'affichage, sauf pour IE qui ne reconnait pas cette valeur

    La meilleure solution est de remplacer 'block' par '' ce qui affecte la valeur par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function cache(idElement) {
        document.getElementById(idElement).style.display = "none";
        document.getElementById(idElement).style.visibility="hidden";
    }
     
    function affiche(idElement) {
        document.getElementById(idElement).style.display = "";
        document.getElementById(idElement).style.visibility="visible";
    }
    D'autre part, coupler visibility et display n'est pas trop judicieux... ils n'ont pas le même comportement.
    Tu devrais te limiter à display :
    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <script>
    function cache(idElement) {
        document.getElementById(idElement).style.display = "none";
    }
     
    function affiche(idElement) {
        document.getElementById(idElement).style.display = "";
    }
    </script>
    <body>
    <table border="1">
    <tr><td>0</td><td>&nbsp;</td></tr>
    <tr id="ligne1"><td>1</td><td><input type="button" onclick="affiche('ligne2');cache('ligne1');"></td></tr>
    <tr id="ligne2" style="display:none;"><td>2</td><td><input type="button" onclick="affiche('ligne1');cache('ligne2');"></td></tr>
    <tr id="ligne3"><td>3</td><td><input type="button" onclick="affiche('ligne4');cache('ligne3');"></td></tr>
    <tr id="ligne4" style="display:none;"><td>4</td><td><input type="button" onclick="affiche('ligne3');cache('ligne4');"></td></tr>
    </table>
    <br>
    </body>
    </html>
    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

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci à tous les deux pour vos réponses.
    J'ai corrigé mon script et il fonctionne.

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

Discussions similaires

  1. Membre calcule par une dimension et pas par les autres
    Par nidhal fekih dans le forum SSAS
    Réponses: 0
    Dernier message: 13/11/2013, 17h19
  2. [VxiR2] Concaténé des lignes de tableau en une ligne avec ,
    Par DevFranck dans le forum Webi
    Réponses: 1
    Dernier message: 05/04/2011, 15h53
  3. [XL-2003] Problème sur une sélection puis séparation par une ligne blanche
    Par korni184 dans le forum Excel
    Réponses: 12
    Dernier message: 08/04/2010, 11h45
  4. [MySQL] Recherche fonction donnant tableau d'une ligne du résultat d'une requête
    Par zakuli dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/02/2009, 18h56
  5. convertir un tableau en une liste sans passer par une boucle
    Par sallemel dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 04/12/2008, 22h04

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