Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3026 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] document.getelementById(obj).innerHTML ne foncitonne pas sous IE

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JS] document.getelementById(obj).innerHTML ne foncitonne pas sous IE

n°1668424
guepe
J'ai du noir sur la truffe ?
Posté le 09-01-2008 à 16:42:25  profilanswer
 

J'ai un script JS (AJAX) qui fonctionne tres bien sous firefox 2 et 3 mais pas du tout sous IE (j'ai une erreur affichée par IE 6)
Grace a des alert bien placés, j'ai pu trouver d'où l'erreur venait, voici la portion fautive :
 

Code :
  1. function tmpObj(obj,text,id_categorie,clearlist) {
  2.    var entete = '<form id="form'+numCategory+'" method="get" name="_form'+numCategory+'">'
  3.    var txtselect = '<select id="subform'+numCategory+'" name="category'+numCategory+'" onchange="getListDirectories(this.value,'+numCategory+')">'
  4.    var txt = '<option value="'+id_categorie+'">' + text +'</option></select>';
  5.    var pied = '</form>\n';
  6.    if(clearlist==-2)
  7.       document.getElementById(obj).innerHTML = entete+pied;
  8.    else if(clearlist==-1)
  9.       document.getElementById(obj).innerHTML = entete+txtselect+txt+pied;
  10.    else
  11.       document.getElementById('subform'+numCategory).innerHTML = document.getElementById('subform'+numCategory).innerHTML + txt + pied;
  12. }


 
La fonction document.getElementById(obj).innerHTML = entete+txtselect+txt+pied; ne fonctionne pas (enfin elle fait planter le script, qui ne poursuit pas)
 
Je ne comprend pas tres bien pourquoi IE refuse ce code : j'ai verifié les parametres, ils sont bons (en meme temps sous FF ca fonctionne), la variable obj est correcte et unique (pas de soucis au niveau de la casse, mes objets ont des noms différents de type form1, form2, etc...
 
Cela fait longtemps que je cherche, j'ai trouvé bcp de pages à propose de innerHTML sous IE mais plutot a propos de problemes de casse.
 
Merci  [:itoine]


---------------
Un blog qu'il est bien
mood
Publicité
Posté le 09-01-2008 à 16:42:25  profilanswer
 

n°1668877
leneufjuil​let2006
♫ Adagio ♫
Posté le 10-01-2008 à 14:03:26  profilanswer
 

C'est quoi l'erreur que te renvoie IE ?
 
Comme c'est de l'ajax, est ce que tu crees correctement ton XMLHTTPRequest propre à IE ?

n°1669137
guepe
J'ai du noir sur la truffe ?
Posté le 10-01-2008 à 16:20:58  profilanswer
 

leneufjuillet2006 a écrit :

C'est quoi l'erreur que te renvoie IE ?

 

Comme c'est de l'ajax, est ce que tu crees correctement ton XMLHTTPRequest propre à IE ?


l'erreur renvoyée est : unknown error !!!

 

Pour ce qui est de la création du xmlhttprequest, voici la fonction responsable :

 
Code :
  1. function GetXmlHttpObject()
  2. {
  3.    var xmlHttp=null;
  4.    try
  5.    {
  6.       // Firefox, Opera 8.0+, Safari
  7.       xmlHttp=new XMLHttpRequest();
  8.    }
  9.    catch (e)
  10.    {
  11.       //Internet Explorer
  12.       try
  13.       {
  14.          xmlHttp=new ActiveXObject("Msxml2.XMLHTTP" );
  15.       }
  16.       catch (e)
  17.       {
  18.          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP" );
  19.       }
  20.    }
  21.    return xmlHttp;
  22. }
 

Qu'en penses-tu ?


Message édité par guepe le 10-01-2008 à 16:21:29

---------------
Un blog qu'il est bien
n°1669157
leneufjuil​let2006
♫ Adagio ♫
Posté le 10-01-2008 à 16:40:57  profilanswer
 

Ca me parait correct.  
 
Par contre pour l'erreur d'IE, bah désolé, je peux pas t'aider :(
 
Peut être un problème de quote. En effet, tu entoures tes double quote  de simple quote et ça, je sais pas si c'est autorisé (perso, je fais toujours l'inverse).
 
ici par exemple.
 

Code :
  1. var entete = '<form id="form'+numCategory+'" method="get" name="_form'+numCategory+'">'


 
Encore une fois, je suis pas sûr du tout.

Message cité 1 fois
Message édité par leneufjuillet2006 le 10-01-2008 à 16:42:37
n°1669194
guepe
J'ai du noir sur la truffe ?
Posté le 10-01-2008 à 17:11:53  profilanswer
 

leneufjuillet2006 a écrit :

Ca me parait correct.  
 
Par contre pour l'erreur d'IE, bah désolé, je peux pas t'aider :(
 
Peut être un problème de quote. En effet, tu entoures tes double quote  de simple quote et ça, je sais pas si c'est autorisé (perso, je fais toujours l'inverse).
 
ici par exemple.
 

Code :
  1. var entete = '<form id="form'+numCategory+'" method="get" name="_form'+numCategory+'">'


 
Encore une fois, je suis pas sûr du tout.


Avec des alert, j'ai pu localiser précisement l'endroit ou le script plante sous IE, et ce n'est pas lors de la construction des string. Ceci dit, peut etre que son probleme est d'appliquer cette string qu'il comprend peut etre mal a une zone du code html grace a innerHTML.
JE vais essayer, mais j'y crois pas trop.


---------------
Un blog qu'il est bien
n°1669323
leneufjuil​let2006
♫ Adagio ♫
Posté le 10-01-2008 à 21:42:58  profilanswer
 

Il n'y a pas de ; à la fin des lignes 2 et 3.

Message cité 1 fois
Message édité par leneufjuillet2006 le 10-01-2008 à 21:43:52
n°1669327
guepe
J'ai du noir sur la truffe ?
Posté le 10-01-2008 à 21:46:40  profilanswer
 

leneufjuillet2006 a écrit :

Il n'y a pas de ; à la fin des lignes 2 et 3.


Ca n'est pas obligatoire, m'enfin je les ai remis : évidemment cela ne change rien, meme erreur : Erreur d'exécution inconnue, code 0


---------------
Un blog qu'il est bien
n°1669435
leneufjuil​let2006
♫ Adagio ♫
Posté le 11-01-2008 à 08:27:08  profilanswer
 

Ok, c'est quand même mieux avec les ;
 
Sinon, peux tu me montrer un exemple d'appel de ta fonction ?
 
Je ne vois pas où tu déclares la variable "numCategory". (c'est peut être une variable globale)
 
Quand clearList = -2, est ce que ça marche ?
 
Edit:
 
En faisant ça :
 

Code :
  1. <html>
  2. <script>
  3.  function tmpObj(obj,text,id_categorie,clearlist) {
  4.   var numCategory="titi";
  5.     var entete = '<form id="form'+numCategory+'" method="get" name="_form'+numCategory+'">';
  6.     var txtselect = '<select id="subform'+numCategory+'" name="category'+numCategory+'" onchange="getListDirectories(this.value,'+numCategory+')">';
  7.     var txt = '<option value="'+id_categorie+'">' + text +'</option></select>';
  8.     var pied = '</form>\n';
  9.     if(clearlist==-2)
  10.        document.getElementById(obj).innerHTML = entete+pied;
  11.     else if(clearlist==-1) {
  12.      alert('houba houba');
  13.        document.getElementById(obj).innerHTML = entete+txtselect+txt+pied;
  14.      alert('houbi houbi');
  15.   }
  16.     else
  17.        document.getElementById('subform'+numCategory).innerHTML = document.getElementById('subform'+numCategory).innerHTML + txt + pied;
  18.  }
  19. </script>
  20. <body>
  21.  <input type="button" value="toto" onclick="javascript:tmpObj('nomDiv', 'valeur', 'cle', -1);">
  22.  <div id="nomDiv">blabla</div>
  23. </body>
  24. </html>


 
chez moi, ça marche nickel sous IE6.

Message cité 1 fois
Message édité par leneufjuillet2006 le 11-01-2008 à 08:58:11
n°1669754
guepe
J'ai du noir sur la truffe ?
Posté le 11-01-2008 à 15:23:40  profilanswer
 

leneufjuillet2006 a écrit :

Ok, c'est quand même mieux avec les ;

 

Sinon, peux tu me montrer un exemple d'appel de ta fonction ?

 

Je ne vois pas où tu déclares la variable "numCategory". (c'est peut être une variable globale)

 

Quand clearList = -2, est ce que ça marche ?

 

Edit:

 

En faisant ça :

 
Code :
  1. <html>
  2. <script>
  3.  function tmpObj(obj,text,id_categorie,clearlist) {
  4.   var numCategory="titi";
  5.     var entete = '<form id="form'+numCategory+'" method="get" name="_form'+numCategory+'">';
  6.     var txtselect = '<select id="subform'+numCategory+'" name="category'+numCategory+'" onchange="getListDirectories(this.value,'+numCategory+')">';
  7.     var txt = '<option value="'+id_categorie+'">' + text +'</option></select>';
  8.     var pied = '</form>\n';
  9.     if(clearlist==-2)
  10.        document.getElementById(obj).innerHTML = entete+pied;
  11.     else if(clearlist==-1) {
  12.      alert('houba houba');
  13.        document.getElementById(obj).innerHTML = entete+txtselect+txt+pied;
  14.      alert('houbi houbi');
  15.   }
  16.     else
  17.        document.getElementById('subform'+numCategory).innerHTML = document.getElementById('subform'+numCategory).innerHTML + txt + pied;
  18.  }
  19. </script>
  20. <body>
  21.  <input type="button" value="toto" onclick="javascript:tmpObj('nomDiv', 'valeur', 'cle', -1);">
  22.  <div id="nomDiv">blabla</div>
  23. </body>
  24. </html>
 

chez moi, ça marche nickel sous IE6.

 

numCategory est bien une variable globale, et j'appelle cette fonction via une autre fonction javascript (qui recupere le resultat de la requete envoyee a php) :

Code :
  1. function stateChanged()
  2. {
  3.    if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete" )
  4.    {
  5.       ans=xmlHttp.responseText;
  6.       var splits = ans.split("<hr>" );    //le resultat de la requete comporte plusieurs lignes que l'on decoupe
  7.       var c=0;
  8.       if(splits.length==2)                   //efface le precedent menu deroulant
  9.          tmpObj('form'+numCategory,'Select',0,-2);
  10.       else                                          //ecrit la premiere entree du meu deroulant
  11.          tmpObj('form'+numCategory,'Select',0,-1);
  12.       alert("splits.length="+splits.length);           //ici deja c'est mort (que je passe par le splits.length==2 ou pas)
  13.       while(c<splits.length-2)   //ecriture des menus déroulants
  14.       {
  15.          var parse_id = splits[c].split("<br>" );                     //parce les infos de chaque ligne (nom + numero de categorie, unique)
  16.          //passe l'objet a remplacer, le titre de la cat,
  17.          //l'id_categorie et un chiffre > 1 pour ajouter un select
  18.          tmpObj('form'+numCategory,parse_id[0],parse_id[1],c);          //appel de la fonction qui plantouille
  19.          c=c+1;
  20.       }
  21.       writeButton('form',splits[c],14,'sendquestion()');  //bouton envoi
  22.    }
  23. }
 

[edit] Pour complement, je n'ecris pas avec mes fonctions javascript dans des div mais dans des form (je selectionne l'id d'une form, enfin de plusieurs en realite). Je ne sais pas si c'est important !


Message édité par guepe le 11-01-2008 à 15:26:38

---------------
Un blog qu'il est bien
n°1670010
mIRROR
Chevreuillobolchévik
Posté le 12-01-2008 à 05:53:16  profilanswer
 

t as du bol je viens d avoir le meme probleme :D
IE ne supporte pas la création des options en innerhtml
il faut passer par les fonctions DOM standards:createElement et appendChild

 

edit : toujours plus fort c ets un bug connu de microsoft depuis 2003
http://support.microsoft.com/kb/276228

Message cité 1 fois
Message édité par mIRROR le 12-01-2008 à 05:55:54

---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
mood
Publicité
Posté le 12-01-2008 à 05:53:16  profilanswer
 

n°1670021
leneufjuil​let2006
♫ Adagio ♫
Posté le 12-01-2008 à 10:27:59  profilanswer
 

Pourquoi mon exemple de script marchait chez moi alors ?

n°1670022
mIRROR
Chevreuillobolchévik
Posté le 12-01-2008 à 10:35:11  profilanswer
 

j ai pas testé mais visiblement ie7 a gardé ce bug
le premier if marche ...pas les autres.. si ca marche chez toi c est ptet que tu utilises un ie pas tres standard (ie standalone ou multiple ie)
et si c est toujours pas ca je saurais vraiment pas t expliquer [:joce]


---------------
« The enemy is the gramophone mind, whether or not one agrees with the record that is being played at the moment. » — George Orwell
n°1670207
guepe
J'ai du noir sur la truffe ?
Posté le 12-01-2008 à 19:41:06  profilanswer
 

mIRROR a écrit :

t as du bol je viens d avoir le meme probleme :D
IE ne supporte pas la création des options en innerhtml
il faut passer par les fonctions DOM standards:createElement et appendChild
 
edit : toujours plus fort c ets un bug connu de microsoft depuis 2003
http://support.microsoft.com/kb/276228


Je vais regarder a quoi ca correspond, je ne connais pas (en fait j'ai jamais vraiment dev de site web). Merci en tout cas, ca va me sauver !


---------------
Un blog qu'il est bien
n°1670587
leneufjuil​let2006
♫ Adagio ♫
Posté le 14-01-2008 à 08:30:51  profilanswer
 

mIRROR a écrit :

j ai pas testé mais visiblement ie7 a gardé ce bug
le premier if marche ...pas les autres.. si ca marche chez toi c est ptet que tu utilises un ie pas tres standard (ie standalone ou multiple ie)
et si c est toujours pas ca je saurais vraiment pas t expliquer [:joce]


 
J'utilise IE 6.0.2900.2180.xpsp_sp2_gdr au boulot.
 

guepe a écrit :


Je vais regarder a quoi ca correspond, je ne connais pas (en fait j'ai jamais vraiment dev de site web). Merci en tout cas, ca va me sauver !


 
Tu pourras balancer ton code qui marche histoire de garder la solution (et de mettre résolu dans le titre de ton sujet).

n°1671040
guepe
J'ai du noir sur la truffe ?
Posté le 14-01-2008 à 18:09:45  profilanswer
 

Ayant de nouveaux soucis avec la solution trouvee, suivre ce topic : http://forum.hardware.fr/hfr/Progr [...] 1111_1.htm
 
Il y a en premier post un debut de solution, ca fonctionne mais j'ai des bugs importants encore.

n°1673717
doublews
Posté le 19-01-2008 à 12:59:28  profilanswer
 

J'avais ce problème aussi, mais en remplaçant les "<" et les ">" par leurs équivalents "&lt;" et "&gt" , le problème est parti !!
A tester !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [JS] document.getelementById(obj).innerHTML ne foncitonne pas sous IE

 

Sujets relatifs
DOM PHP equivalent de innerHTMLCrrer un script pour sortir les image de document word
[JavaScript] Spécification de l'encodage d'un document XMLexcel et microsfot office document imaging
[Ajax] XMLHttpRequest ou document.implementation ?script recherche mot et liste document les contenants
[VB.NET]propriete document wordSécuriser un document PDF
VB6 : Imprimer un document avec wordpadExtraire le texte d'un document word
Plus de sujets relatifs à : [JS] document.getelementById(obj).innerHTML ne foncitonne pas sous IE


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)