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] IE vs FF : mise à jour dynamique d'un tableau


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut [DOM] IE vs FF : mise à jour dynamique d'un tableau
    Ce code me permet de mettre à jour un tableau à partir des résultats d'une requete en AJAX. Je créé une nouvelle ligne, une nouvelle cellule, et je place dedans du texte ainsi qu'un champ input hidden.

    Sous Firefox ça marche très bien, sous IE aucune ligne ne se rajoute à 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
    22
    23
    24
    25
    26
    27
    28
    // On créé la ligne
    var TR = document.createElement ("tr");
     
    var TD_kcal = document.createElement ("td");
    var TXT_kcal = document.createTextNode (kcal);
    TD_kcal.appendChild (TXT_kcal);
     
    var form = document.createElement("form");
    TD_kcal.appendChild (form);
     
    // input hidden kcal
    var input_kcal = document.createElement("input");
    form.appendChild (input_kcal);
    // attribut type
    var attr_type = document.createAttribute("type");
    attr_type.nodeValue = "hidden";
    input_kcal.setAttributeNode(attr_type);
    // attribut name
    var attr_name = document.createAttribute("name");
    attr_name.nodeValue = "kcal";
    input_kcal.setAttributeNode(attr_name);
    // attribut value
    var attr_val = document.createAttribute("value");
    attr_val.nodeValue = kcal;
    input_kcal.setAttributeNode(attr_val);
     
     
    TR.appendChild(TD_kcal);
    si je remplace "hidden" par "text" ça marche bien en affichant l'input, mais c'est pas ce que je veux...

    Je vois vraiment pas d'où ça pourrait venir, vous avez une idée ?

    Merci

  2. #2
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    as tu créé un tbody dans ta table?

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    bonjour,


    pour un tableau il faut utiliser les méthodes insertRow() et insertCell().

  4. #4
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Oui j'ai bien un thead et un tbody, et je rajoute dans le tbody


    Je vais essayer avec InsertRow et InsertCell merci.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Bon alors j'ai fait des tests avec insertRow() et InsertCell() avec des cellules de text, ça marche bien sous IE et sous FF, par contre quand je veux mettre des formulaires dans mes cellules ça marche moins bien :/


    Le code simplifié :
    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
    var row = document.getElementById("liste").insertRow(-1);
     
    var TD_kcal = row.insertCell(-1);
    var TXT_kcal = document.createTextNode (kcal);
    TD_kcal.appendChild (TXT_kcal);
     
    // formulaire
    var form = document.createElement("form");
    TD_kcal.appendChild (form);
     
    // input hidden 
    var input_kcal = document.createElement("input");
    input_kcal.className = 'kcal';				
    form.appendChild (input_kcal);
    	// attribut name
    	var attr_name = document.createAttribute("name");
    	attr_name.nodeValue = "kcal";
    	input_kcal.setAttributeNode(attr_name);
    	// attribut value
    	var attr_val = document.createAttribute("value");
    	attr_val.nodeValue = kcal;
    	input_kcal.setAttributeNode(attr_val);
    	// attribut type
    	var attr_type = document.createAttribute("type");
    	attr_type.nodeValue = "hidden";
    	input_kcal.setAttributeNode(attr_type);
    J'ai également d'autre insertCell() avant et après mais qui ne pose pas de problème puisque ce n'est que du texte.

    Le problème ici est que l'input que je veux mettre dans mon form doit être "hidden", je créé donc un attribut type et je suis lui donne la bonne valeur. Ca marche sans problème sous FF, mais pas sous IE.
    Sous IE j'ai l'input qui s'affiche comme si j'avais donné à l'attribut type la valeur "text". Et puis les cellules qui devrait s'afficher après celle ci ne s'affiche pas non plus, comme s'il bloquait sur cette cellule, et pourtant je n'ai pas de message d'erreur apparent.


    Je vois vraiment pas d'où ça peux venir, une idée ?

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    IE ne prend pas en charge les méthodes createAttribute, setAttributeNode, setAttribute, getAttribute (bref toutes les méthodes qui gèrent les attributs ).

    Donc il vaut mieux écrire :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var input_kcal = document.createElement("input");
    input_kcal.type = "hidden";
    input_kcal.value = "valeur";
    //etc..

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Merci pour la réponse, je viens d'essayer le code 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
    var TD_kcal = row.insertCell(-1);
    var TXT_kcal = document.createTextNode (kcal);
    TD_kcal.appendChild (TXT_kcal);
    // form				
    var form = document.createElement("form");
    TD_kcal.appendChild (form);
     
    // input hidden kcal
    var input_kcal = document.createElement("input");
    input_kcal.className = 'kcal';				
    form.appendChild (input_kcal);
    input_kcal.name = "kcal";
    input_kcal.value = 10; 
    input_kcal.type = "hidden";
    alert(input_kcal.value);
    j'ai toujours le même problème sous IE, et j'ai même l'impression que ça ne passe plus sous FF. J'ai rajouté le alert() pour voir si le value est bien attribué.
    Avec type="text" j'ai bien 10 qui s'affiche, avec type="hidden" j'ai une fenêtre vide

    Je vais revenir avec ma première solution, mais j'aimerais bien quand même trouver pourquoi ça ne marche pas sous IE

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Fais l'appendChild après avoir défini les propriétés de ton élément. De plus, sous IE je crois que l'on ne peut pas attribuer de manière dynamique le name d'un élément.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Auteur Voir le message
    Fais l'appendChild après avoir défini les propriétés de ton élément. De plus, sous IE je crois que l'on ne peut pas attribuer de manière dynamique le name d'un élément.
    +1
    Il faut le faire après que l'élément ait été créé ...

    A+

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Ca marche

    Plus de problème a priori, même sous IE.


    Une dernière question, dans une autre cellule j'ai un input qui doit avoir un attribut onchange.

    J'avais ça avec ma première solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // attribut onchange
    var attr_change = document.createAttribute("onchange");
    attr_change.nodeValue = "MAJ_info_rec()";
    iput_poids.setAttributeNode(attr_change);
    mais avec la nouvelle manière que vous m'avez expliquer j'ai pas l'impression que ce soit possible de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    input_poids.onchange = "MAJ_info_rec()";
    C'est possible de rajouter un gestionnaire d'évènement onchange sur un input générer dynamiquement ?

    Merci

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Citation Envoyé par vichenze Voir le message
    mais avec la nouvelle manière que vous m'avez expliquer j'ai pas l'impression que ce soit possible de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    input_poids.onchange = "MAJ_info_rec()";
    C'est possible de rajouter un gestionnaire d'évènement onchange sur un input générer dynamiquement ?
    tu y étais presque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    input_poids.onchange = function(){MAJ_info_rec()};

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Génial ça marche

    Merci beaucoup pour cette précieuse aide.

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

Discussions similaires

  1. [MySQL] Mise à jour dynamique des lignes d'un tableau
    Par woodyfrance dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/02/2008, 11h50
  2. [MySQL] Mise à jour dynamique base de données
    Par Lili72430 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/09/2007, 12h36
  3. [Débutant][<html:select>]options mises à jour dynamiquement
    Par anayathefirst dans le forum Struts 1
    Réponses: 10
    Dernier message: 23/01/2007, 21h24
  4. Mise à jour dynamique de JTable
    Par Virgile le chat dans le forum Composants
    Réponses: 1
    Dernier message: 03/12/2006, 12h38
  5. Mise à jour dynamique d'un champs
    Par Badiste dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/10/2006, 15h18

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