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 :

innerHTML ne fonctionnant pas avec IE


Sujet :

JavaScript

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut innerHTML ne fonctionnant pas avec IE
    Bonsoir,

    J'ai un table qui contient plusieurs tbody.

    Un de ces tbody a l'id "co_author"

    Dans ce Tobdy, j'aimerais insérer 3 zones de textes, j'appelle donc sur le clic d'un bouton une fonction nommée Add_Co_Author.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td><input type="button" value="Add CO-AUTHOR" onClick="Add_Co_Author();"></td>
    Voici le code de ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function Add_Co_Author()
    {
    	if(global_numero_auteur < 13)
    	{
    		document.getElementById('co_author').innerHTML+= '<tr><td class="important">CO-AUTHOR '+global_numero_auteur+'</td></tr><tr><td>FIRST NAME<span class="asterix">*</span></td><td align="left"><input type="text" size="50"></td></tr><tr><td>LAST NAME<span class="asterix">*</span></td><td align="left"><input type="text" size="50"></td></tr><tr><td>INSTITUTION/AFFILIATION<span class="asterix">*</span></td><td align="left"><input type="text" size="50" onfocus="this.style.backgroundColor=\'yellow\'" onblur="this.style.backgroundColor=\'white\'"></td></tr>';
    	}
     
    	global_numero_auteur+=1;
    }
    J'arrive dans la fonction, global_numero_auteur vaut 4 quand j'arrive dans la fonction (je l'ai vérifié par une alerte).

    Le problème doit venir du innerHTML.

    Auriez-vous une autre solution fonctionnant avec IE ?

    Edit :

    J'ai aussi testé ceci mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function Add_Co_Author()
    {
    	contenu_precedent = new String(document.getElementById('co_author').innerHTML);
     
    	//alert(global_numero_auteur);
    	if(global_numero_auteur < 13)
    	{
    		document.getElementById('co_author').innerHTML = contenu_precedent.concat('<tr><td class="important">CO-AUTHOR '+global_numero_auteur+'</td></tr><tr><td>FIRST NAME<span class="asterix">*</span></td><td align="left"><input type="text" size="50"></td></tr><tr><td>LAST NAME<span class="asterix">*</span></td><td align="left"><input type="text" size="50"></td></tr><tr><td>INSTITUTION/AFFILIATION<span class="asterix">*</span></td><td align="left"><input type="text" size="50" onfocus="this.style.backgroundColor=\'yellow\'" onblur="this.style.backgroundColor=\'white\'"></td></tr>');
    	}
    	global_numero_auteur= global_numero_auteur+1;
    }
    En tout cas, avec Firefox, cela fonctionne parfaitement.

    Merci d'avance.

    beegees

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    un ptit parseInt, pour vérifier que ta variable est bien numérique?

  3. #3
    Membre expérimenté Avatar de AcidLines
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Février 2010
    Messages : 198
    Par défaut
    Cela ne viendrait pas du "+" a droite de ton innerHTML ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('co_author').innerHTML+=...

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Par défaut
    <TABLE>.innerHTML
    <TBODY>.innerHTML
    <SELECT>.innerHTML
    <TR>.innerHTLM
    provoquent des erreur sous IE, c'est con, mais c'est comme ça.

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par javatwister Voir le message
    un ptit parseInt, pour vérifier que ta variable est bien numérique?
    Salut,

    J'ai fait une alerte typeof et il m'indique "number".

    Le problème ne viendrait donc pas de là.

    Encore merci.

    beegees

    Citation Envoyé par AcidLines Voir le message
    Cela ne viendrait pas du "+" a droite de ton innerHTML ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('co_author').innerHTML+=...
    Salut,

    Avec ou sans +, ça ne fonctionne pas.

    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('co_author').innerHTML ='teste';
    Sans succès.

    Merci pour ton aide.

    beegees

    Citation Envoyé par Gatsu35 Voir le message
    <TABLE>.innerHTML
    <TBODY>.innerHTML
    <SELECT>.innerHTML
    <TR>.innerHTLM
    provoquent des erreur sous IE, c'est con, mais c'est comme ça.
    Salut,

    Merci pour ta réponse.

    Je dois alors utiliser le DOM (création de TR, TD...) ? ou as-tu une autre solution ?

    Encore merci

    beegees

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Salut Beegees ;-)

    je ne crois pas qu'il puisse il y avoir plusieurs tbody dans un tableau :-/

    aurais tu un code un peu plus complet de ce que tu souhaites faire ?

  7. #7
    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
    Citation Envoyé par le_chomeur Voir le message
    je ne crois pas qu'il puisse il y avoir plusieurs tbody dans un tableau :-/
    Si, c'est possible.
    Ce sont les thead et tfoot qui doivent être uniques
    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

  8. #8
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    Salut Beegees ;-)

    je ne crois pas qu'il puisse il y avoir plusieurs tbody dans un tableau :-/

    aurais tu un code un peu plus complet de ce que tu souhaites faire ?
    Salut Chomy,

    Merci pour ta réponse.

    Voici ce que je devrais obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <tr>
    			<td class="important">CO-AUTHOR 1</td>
    		</tr>
    		<tr>
    			<td>FIRST NAME<span class="asterix">*</span></td><td align="left" class="td_abstracts"><input type="text" size="50"	onfocus="this.style.backgroundColor='yellow'" onblur="this.style.backgroundColor='white'"></td>
    		</tr>
    		<tr>
    			<td>LAST NAME<span class="asterix">*</span></td><td align="left" class="td_abstracts"><input type="text" size="50" onfocus="this.style.backgroundColor='yellow'" onblur="this.style.backgroundColor='white'"></td>
    		</tr>
    		<tr>
    			<td>INSTITUTION/AFFILIATION<span class="asterix">*</span></td><td align="left"><input type="text" size="50" onfocus="this.style.backgroundColor='yellow'" onblur="this.style.backgroundColor='white'"></td>
    		</tr>
    Encore merci à toi.

    beegees

  9. #9
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Si, c'est possible.
    Ce sont les thead et tfoot qui doivent être uniques
    Merci pour cette confirmation Bovino


    beegees

  10. #10
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Par défaut
    Bon pour répondre à tout ça :
    dans un <table> : thead et tfoot sont uniques, et on peut avoir plusieurs tbody.

    comme je l'ai dit les innerHTML pètent sous IE
    le seul pb c'est qu'il faut passer par le dom, mais tout en conservant la possibilité de ne pas avoir à trop taper sur le code existant.

    donc je te propose :
    au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(global_numero_auteur < 13)
    	{
    		document.getElementById('co_author').innerHTML+= '<tr><td class="important">CO-AUTHOR '+global_numero_auteur+'</td></tr><tr><td>FIRST NAME<span class="asterix">*</span></td><td align="left"><input type="text" size="50"></td></tr><tr><td>LAST NAME<span class="asterix">*</span></td><td align="left"><input type="text" size="50"></td></tr><tr><td>INSTITUTION/AFFILIATION<span class="asterix">*</span></td><td align="left"><input type="text" size="50" onfocus="this.style.backgroundColor=\'yellow\'" onblur="this.style.backgroundColor=\'white\'"></td></tr>';
    	}
    tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    addHTML(document.getElementById('co_author'), '<tr><td class="important">CO-AUTHOR '+global_numero_auteur+'</td></tr><tr><td>FIRST NAME<span class="asterix">*</span></td><td align="left"><input type="text" size="50"></td></tr><tr><td>LAST NAME<span class="asterix">*</span></td><td align="left"><input type="text" size="50"></td></tr><tr><td>INSTITUTION/AFFILIATION<span class="asterix">*</span></td><td align="left"><input type="text" size="50" onfocus="this.style.backgroundColor=\'yellow\'" onblur="this.style.backgroundColor=\'white\'"></td></tr>');
    En utilisant ces deux fonctions
    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
     
    function setInnerHTML(elm, str) {
    	try {
    		elm.innerHTML = str;
    	} catch(e) {
    		var div = document.createElement('div');
    		div.innerHTML = str;
    		//vide elm
    		while(elm.firstChild) {
    			elm.removeChild(elm.firstChild);
    		}
    		//add child from div to the element
    		while(div.firstChild) {
    			elm.appendChild(div.firstChild);
    		}
    	}	
    }
    function addHTML(elm, str) {
    	var html = elm.innerHTML;
    	setInnerHTML(elm, html + str);
    }

  11. #11
    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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    dans un array : thead et tfoot sont uniques, et on peut avoir plusieurs tbody.

    y'a des thead des tbody et tfoot dans des arrays ??

    table != array
    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 !

  12. #12
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    je ne crois pas qu'il puisse il y avoir plusieurs tbody dans un tableau :-/
    je n'en suis donc pas sur

    Bon sinon je ne pense pas que le problème vienne de innerHTML mais plutôt de la string passé en paramètre...

    Beegees , peux tu fournir en pièce jointe un exemple complet ?

  13. #13
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Salut et merci pour ta réponse Gatsu35,

    Vraiment très intéressant.

    Si je comprends bien, au moment où il rencontre une erreur, il crée le table avec le DOM ?

    Voici ce que ça donne :

    Voir image attachée

    CO-AUTHOR 4FIRST NAME* sont sur la même ligne, penses-tu que l'on peut régler ce problème ?

    Le plus important serait d'aligner les input text.

    Encore merci pour ce très beau code

    beegees

  14. #14
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    Bon sinon je ne pense pas que le problème vienne de innerHTML mais plutôt de la string passé en paramètre...
    le pb vient de innerHTML, pour avoir déjà eu à faire à ce pb durant les 3 dernieres années au moins 20 ou 30 fois

    innerHTML fait péter une erreur sous IE quand tu essaye de le modifier sur un élément tel que : table, select, tr, tfoot, tbody, thead

    doit y avoir d'autres éléments

  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 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 658
    Billets dans le blog
    1
    Par défaut
    D'ou ma méfiance férocement ancrée d'utiliser le innerHTML pour ajouter des éléments dynamiqueemnt au pied de biche dans une page HTML.

    L'utilisation du DOM est certes plus lourde, mais au moins àprès il n'y a pas de mauvaises surprises. Les navigateurs reconnaissent leurs petits !
    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
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    Gatsu35 effectivement , renseignement pris , le tbody est en readonly via innerHTML

    Obligation de passer par le dom beegees

  17. #17
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    Gatsu35 effectivement , renseignement pris , le tbody est en readonly via innerHTML

    Obligation de passer par le dom beegees
    Merci pour la confirmation chomy.

    beegees

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

Discussions similaires

  1. innerHTML ne fonctionne pas avec FireFox
    Par MedNaceur dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 28/12/2009, 17h31
  2. Réponses: 1
    Dernier message: 25/01/2007, 18h19
  3. evenement onclick ne fonctionne pas avec explorer??
    Par nath-0-0 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/03/2006, 12h13
  4. Réponses: 7
    Dernier message: 24/01/2006, 11h03
  5. window.resizeTo ne fonctionne pas avec firefox?
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/06/2005, 15h07

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