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 confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    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 expérimenté 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
    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
    Billets dans le blog
    20
    Par défaut
    Voir aussi la contribution de SpaceFrog à ce sujet !
    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
    Membre expérimenté 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
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    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 expérimenté 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
    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