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] Création dynamique d'un tableau bug sous Firefox [Fait]


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut [DOM] Création dynamique d'un tableau bug sous Firefox
    Bonjour tout le monde, ouaip, ça va vous paraître bizarre, mais j'ai la création d'un tableau qui fonctionne sous IE mais pas sous Firefox, alors que j'utilise le DOM dans le bon ordre. C'est à dire :

    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
     
     
     
    var table = document.createElement('table');
    var tBody = document.createElement('tbody');
    var row = document.createElement('tr');
    var cell = document.createElement('td');
    var inputText = document.createElement('input');
    inputText.setAttribute('type','text');
    inputText.setAttribute('value','toto');
     
    //Ensuite, je rajoute les enfants dans l'ordre inverse
    cell.appendChild(inputText);
    row.appendChild(cell);
    tBody.appendChild(row);
    table.appendChild(tBody);
     
    //Disons que l'on a récupéré le body plus haut
    body.appendChild(table);
    Bien entendu, j'ai des boucles qui crééent les lignes et les cellules.

    Sous IE, j'ai un bon tableau :



    Mais sous Firefox:


    Je pense, comme sur certains sujets Javascript de ce forum, que cela vient de la balise input qui n'est pas fermée (en effet, le createElement doit créer un truc du genre <input type="text" value="toto">). IE, qui ne respecte rien, doit laisser passer ça, mais FF ne doit pas aimer.

    Merci de votre aide !

  2. #2
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    y as pas moyen que tu rajoute une balise "</input>"???
    ... un flash ... et ça repart

    700R ... catch me if u can

    Best regards,
    .

  3. #3
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Ben je sais pas si c'est cross browser...

    A part si je fais un truc moche du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var myDiv = document.createElement('div');
     
    myDiv.innerHTML = '<input type="text" value="toto" />';
    cell.appendChild(myDiv);
    Y'a pas autre chose que ça ??

  4. #4
    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
    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 !

  5. #5
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    inputText.type='text';
    inputText.value='toto';
    Merci, mais j'avais testé, ça revient au même.

  6. #6
    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 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Je dirais plutôt qu'il doit y avoir un souci dans ta façon de générer ton tableau.
    Ton code ne correspond pas aux images et manifestement, vu le symptôme, l'erreur semble précisément venir de la portion de code que tu ne montres pas ! (Génération et insertion de plusieurs cellules par ligne)
    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

  7. #7
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Ok ok, pourtant ce que j'ai mis là haut résume mon code, mais bon, je vous montre ça.

    J'ai trois objets JS, appellons-les MyTable, MyRow(name,index), et MyCell(name,index).

    1) Je créé d'abord toutes les instances d'objets nécessaires, lignes avec leurs cellules associées. Les listes de lignes et de cellules sont remplies.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Dans MyTable.js
     
    //Array d'objets MyRow
    this._listRows;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Dans MyRow.js
     
    //Array d'objets MyCell
    this._listCells;

    Donc tout ceci est construit sous forme d'arbre :
    MyTable
    |_______MyRow1
    |_________MyCell1
    |_________MyCell2
    |_________MyCellN
    |_______MyRowN

    2)Je parcours tous les objets créés précédemment et je construis mon tableau :

    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
     
    //Dans MyTable.Js
     
     
    var myTable = document.createElement('table');
    var myTBody = document.createElement('tbody');
     
     
        if (this._listRows != null) {
            for (var i = -1; i < this._listRows.length; i++) {
     
                //Dans MyTable.js j'ai une méthode de recherche de la ligne par index, et, avec la Row trouvée, je peux faire un ajout de Row avec le TBody en paramètre
                this.GetRow(i).Add(myTBody);
            }
        }
     
     
    myTable.appendChild(myTBody);
     
    //DivContent est le div récupéré lors de la construction de l'objet
    divContent.appendChild(myTable);
    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
     
    //Dans MyRow.js
    MyRow.prototype.Add = function(tbody)
    {
         //Création de la Row
         var myRow = document.createElement('tr');
     
                 //Ajout des cellules dans la Row
            for (var i = -1; i < this._listCell.length; i++) {
     
                var cell = null;
     
                //Méthode présente dans MyRow.js qui récupère la cellule de l'index
                cell = this.GetCell(i);
     
                if (cell != null) {
     
                    //Ajout de cellule dans la Row  
                    cell.Add(myRow);
                }
            }   
         //Ajout de la Row dans le TBody
         tbody.appendChild(myRow);
    }
    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
     
    //Dans MyCell.js
     
    MyCell.prototype.Add = function(row)
    {
        var myCell = document.createElement('td');
        var inputText = document.createElement('input');
     
        myCell.appendChild(inputText);
        inputText.setAttribute('type','text');
        inputText.setAttribute('value','toto');
     
         row.appendChild(myCell);
     
    }
    Voilà, c'est ce que je fais, je pars du parent vers l'enfant pour créer mon tableau.

  8. #8
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Pfff, même sans le input ça plante sous FF, je ne comprends pas pourquoi là...

  9. #9
    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 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Parce que le problème ne vient pas de l'input...
    Mais avec le code parcellaire que tu nous montres, il est difficile d'en dire plus !

    EDIT : Sauf que tu as apparemment plus de contenu que de cases, puisque tes boucles vont de -1 à la longueur de tes arrays
    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

  10. #10
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Heu parcellaire ? je vous montre les trucs principaux qui touchent au DOM ! Avant, ce n'est que de l'instanciation d'objet javascript avec méthodes et propriétés...

    Pour ce qui est du -1, c'est normal, je me suis gouré en mettant de 0 à 10 dans l'exemple, c'est de -1 à 10.

    Edit: En ce qui concerne la création des éléments, je vous montre la TOTALITE de ce que je fais en DOM et qui créé donc les lignes et cellules de la table.

  11. #11
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Heu, à quoi correspond la balise [FAIT] à côté de mon sujet ? Cela signifie qu'on ne peut aller plus loin ?

  12. #12
    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
    as tu au moins été voir les liens qui ton' étés donnés ?
    le code de création rapide de tableau fonctionne sous IE FFX etc ...
    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 !

  13. #13
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Oui, j'ai été voir ton lien dès que tu as posté ta réponse, et je n'arrive pas à voir la différence avec ce que j'ai fait. Ce que je fais, je le fais dans le même ordre que toi:

    Création de l'élément Table
    Création de l'élément TBody
    Création des éléments TR
    |____Création des éléments TD pour chaque TR
    |_________Création des éléments Text ou Input pour chaque élément TD
    |_________Assignation du Text ou Input dans l'élément TD
    |____Assignation des éléménts TD dans chaque TR
    Assignation de chaque TR dans le TBody
    Assignation du TBody dans l'élément TABLE
    Assignation de l'élémént TABLE dans mon conteneur (div ou body).


    Ecoutez, je ne suis pas de mauvaise foi, ce n'est pas comme si je n'avais pas cherché avant...

  14. #14
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Je ne suis pas de mauvaise foi mais par contre je suis un gros boulay .

    Le bug vient du fait que j'avais un display:block qui trainait. FF n'aime pas pour des cellules de tableau, ce qui est normal, et il faut mettre le display à ''.

    Donc c'est résolu, et je remercie toutes vos réponses et votre aide.

  15. #15
    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
    tu peux laisser le block mais mettre un tablerow sur les tr ...
    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 !

  16. #16
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    tu peux laisser le block mais mettre un tablerow sur les tr ...
    Ok merci .

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/03/2014, 16h20
  2. Création dynamique d'un tableau à 2 dimension
    Par Tonii dans le forum Langage
    Réponses: 8
    Dernier message: 16/07/2010, 15h48
  3. [Visual Web] Création dynamique d'un tableau
    Par QAYS dans le forum NetBeans
    Réponses: 1
    Dernier message: 20/06/2007, 15h47
  4. [DOM] création dynamique de champs
    Par Ekik dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/01/2007, 10h11
  5. Petit bug sous firefox !
    Par Joe-La-Boule dans le forum Mise en page CSS
    Réponses: 11
    Dernier message: 17/01/2007, 21h24

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