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

document.getelementById(obj).innerHTML ne foncitonne pas sous IE [JS] - HTML/CSS - Programmation

Marsh Posté le 09-01-2008 à 16:42:25    

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
Reply

Marsh Posté le 09-01-2008 à 16:42:25   

Reply

Marsh Posté le 10-01-2008 à 14:03:26    

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 ?

Reply

Marsh Posté le 10-01-2008 à 16:20:58    

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
Reply

Marsh Posté le 10-01-2008 à 16:40:57    

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
Reply

Marsh Posté le 10-01-2008 à 17:11:53    

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
Reply

Marsh Posté le 10-01-2008 à 21:42:58    

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
Reply

Marsh Posté le 10-01-2008 à 21:46:40    

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
Reply

Marsh Posté le 11-01-2008 à 08:27:08    

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
Reply

Marsh Posté le 11-01-2008 à 15:23:40    

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
Reply

Marsh Posté le 12-01-2008 à 05:53:16    

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
Reply

Marsh Posté le 12-01-2008 à 05:53:16   

Reply

Marsh Posté le 12-01-2008 à 10:27:59    

Pourquoi mon exemple de script marchait chez moi alors ?

Reply

Marsh Posté le 12-01-2008 à 10:35:11    

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
Reply

Marsh Posté le 12-01-2008 à 19:41:06    

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
Reply

Marsh Posté le 14-01-2008 à 08:30:51    

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).

Reply

Marsh Posté le 14-01-2008 à 18:09:45    

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.

Reply

Marsh Posté le 19-01-2008 à 12:59:28    

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 !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed