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 :

[DOM] Générer un tableau avec innerHTML


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Points : 58
    Points
    58
    Par défaut [DOM] Générer un tableau avec innerHTML
    Bonjour,
    J'ai commencé la mise en place d'un petit formulaire en php/ajax qui ajoute des articles en promos sans recharger la page.
    Mon problème a commencé lorsque j'ai voulu insérer mes enregistrements dans un tableau au fur et a mesure que l'utilisateur entre des articles et que la requete d'ajout fonctionne.

    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
     
    var n = 0;
    function ecrire_tableau(lib, colis, stock)
    {
     if(n == 0)
     {
        //Ecriture de l'entete du tableau
    	document.getElementById('ajax_ajouts').innerHTML = '<table border="1"> <tr> <th>Libelle</th> <th>Quantité par colis</th> <th>Quantité en stock</th> </tr>';
    	//Ecriture du premier ajout
    	document.getElementById('ajax_ajouts').innerHTML += "<tr> <td>"+lib+"</td> <td>"+colis+"</td> <td>"+stock+"</td> </tr>";
    	n++;
     }
     else
     {
     //Ecriture du n-ième ajout
     document.getElementById('ajax_ajouts').innerHTML += "<tr> <td>"+lib+"</td> <td>"+colis+"</td> <td>"+stock+"</td> </tr>";
     n++;
     }
     
    }
    J'explique le problème: Lorsqu'un enregistrement s'ajoute, il s'affiche bien mais en dehors du tableau. De plus, dans le tableau je n'ai que la première ligne avec les balises <th> qui s'affiche correctement avec des bordures.

  2. #2
    Membre actif Avatar de nod__
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Points : 226
    Points
    226
    Par défaut
    Ouch, tu veux pas utiliser innerHTML pour manipuler les tableaux. Ça bug dans IE.

    il vaut mieux utiliser le DOM http://www.quirksmode.org/dom/w3c_html.html#tables
    Les pages de test montrent des exemples d'utilisation de tout ça

  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 : 54
    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
    Voir aussi la contribution de SpaceFrog à ce sujet !

  4. #4
    Membre actif Avatar de nod__
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Points : 226
    Points
    226
    Par défaut
    j'ai un faible pour insertRow() et insertCell() puisque ça rend plus court le code, beaucoup plus lisible aussi. Et tout le monde l'implémente, c'est la fête \o/

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Points : 58
    Points
    58
    Par défaut
    merci beaucoups, comme je pensait va falloir que je me mette au DOM :'(
    C'est le début des ennuies .
    Bref, je vous tient au courant!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Points : 58
    Points
    58
    Par défaut
    C'est bon!
    Avec les exemples c'était pas si compliqué que ca.
    voici mon code pour les intéréssés:
    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
     
    var nb = 0;
    function ecrire_tableau(lib, colis, stock)
    {
    if(nb == 0) document.getElementById('ajax_ajouts').style.display = "";
    var x = document.getElementById('ajouts');
    var y = x.insertRow(1);
    var z = document.createElement('td');
    z.appendChild(document.createTextNode(lib));
    y.appendChild(z);
    var z = document.createElement('td');
    z.appendChild(document.createTextNode(colis));
    y.appendChild(z);
    var z = document.createElement('td');
    z.appendChild(document.createTextNode(stock));
    y.appendChild(z);
    nb++;
    document.getElementById('ajax_ajouts').innerHTML += nb+" enregistrement(s) insérés.";

  7. #7
    Membre actif Avatar de nod__
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 176
    Points : 226
    Points
    226
    Par défaut
    je dirais même plus
    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
    var nb = 0;
        function ecrire_tableau(lib, colis, stock)
        {
            if(nb == 0) {document.getElementById('ajax_ajouts').style.display = "";}
            var x = document.getElementById('ajouts');
            var y = x.insertRow(x.rows.length);
            // var z = y.insertCell(0);
            // z.appendChild(document.createTextNode(lib));
            // et on peut même remplacer ces deux lignes directement par : 
            y.insertCell(0).appendChild(document.createTextNode(lib));
            y.insertCell(1).appendChild(document.createTextNode(colis));
            y.insertCell(2).appendChild(document.createTextNode(stock));
     
            nb++;
            document.getElementById('ajax_ajouts').innerHTML += nb+" enregistrement(s) insérés.";
        }

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 12/11/2010, 09h31
  2. [PHP 5.2] Générer un tableau avec PHP (décalage des en-têtes)
    Par beegees dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2009, 17h43
  3. [DOM] insertion de code HTML au sein d'un tableau avec innerHTML
    Par Tanebisse dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/11/2008, 14h52
  4. Modifier un tableau avec innerHTML sous IE
    Par Gédéon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/12/2006, 12h32
  5. [DOM] Cloner un tableau avec DOM
    Par zwck dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/10/2005, 22h26

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