InnerHTML incompatible IE

Résolu/Fermé
mchiicha - 18 mars 2009 à 13:12
 jorge - 19 mars 2009 à 09:52
Bonjour,

J'ai une liste déroulante dans mon menu qui marche parfaitement sous FF mais pas sous IE (comme par hasard!) j'ai passé tout le week end à voir ce qui pourrait bloquer et je pense finalement que c'est le innerHTML puisque mon code se poursuit jusqu'au bout mais ne remplie pas la liste déroulante

Voici un bout du code initial javascript qui permet d'afficher la réponse du serveur:

display_list2 = http_request.responseText;
// List is displayed in the target fieldset
obj = parent.frames[display_destination[0]].document.getElementById(display_destination[1]);
obj.innerHTML = obj.innerHTML + display_list2;

Modifications apportées: Création des Options à la main pour le select :

reg1=new RegExp("<option>", "g");
reg2=new RegExp("</option>", "g");

// Transform display_list2 into a new string without tags <option> </option>
display_list2=display_list2.replace(reg1,"");
display_list2=display_list2.split(reg2);

//Add options to the element SELECT
for (var i=0; i<display_list2.length-2; i++) {
var oOption = document.createElement("OPTION");
oOption.text="Option: " + i;
oOption.value=display_list2[i];
document.all.select.add(oOption);
}
Et voici la déclaration de la table des pays qui sera intégrée dans la liste déroulante
<th>Country
<select id="country_table" name="country" onchange="refresh_operator_list()" ><option></option></select>
</th>

Les modifs marchent sous FF mais pas sous IE aucun changement alors je vous avoue que je suis bloquée!
A voir également:

1 réponse

NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
18 mars 2009 à 14:23
1/ Utilisez le débugger de IE (outils>Options Internet>Anvancés, dans la liste il y a navigation et un peu plus bas désactiver deboggage : deux cases à décocher)
2/ ce n'est pas innerHTML je pense car je l'utilise sans problème. Un teste simple pour vérifier
vous rajouter <div id"mondiv"></div> dans HTML et vous fait document.getElementById('mondiv').innerHTML="cool!"
3
quand j'active le deboggage j'ai l'erreur suivante: document.all.select est NULL ou n'est pas un objet au niveau de la boucle que j'ai rajouté qui permet de construire a la main les options du select (je l'ai fait pcar quand j'ecris qqch a l'intérieur des balises <option> </option> ça s'affiche et ça disparait aussitôt)
Voici le code de cette boucle for:

//Add options to the element SELECT
for (var i=0; i<display_list2.length-2; i++) {
var oOption = document.createElement("OPTION");
oOption.text="Option: " + i;
oOption.value=display_list2[i];
document.all.select.add(oOption);
}

Si qqch vous parait anormale merci de me prévenir!
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513 > mchiicha
18 mars 2009 à 14:47
document.all est très déconseillé :s
préférez quelque chose comme montré ici : http://www.aliasdmc.fr/dom_javascript_html/javascript_html_select_add.html
0
mchiicha > NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013
18 mars 2009 à 15:08
Oui j'ai opté pour le objtselect.add(oOption,before) dans ma boucle for

for (var i=0; i<display_list2.length-2; i++) {
var oOption = document.createElement("OPTION");
oOption.text="Option: " + i;
oOption.value=display_list2[i];
alert(oOption.value);
if(!document.all){
before= objtselect.options[1];
}
else{
before=1;
}
objtselect.add(oOption,before);
//document.all.select.add(oOption);
}

et j'ai l'erreur suivante: 'undefined' a la valeur Null ou n'est pas un objet. Quand je regarde display_list2.length ça me donne 153 sous IE et 155 sous FF et je me suis rendu compte que les 2premiers éléments de ma liste quand je la déroule sous FF sont vides mais je ne sais pas pk :s
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513 > mchiicha
18 mars 2009 à 15:11
vous en avez laissé un : if(!document.all){

si vous voulez le premier élément de votre select, ce n'est aps
before= objtselect.options[1];
mais
before= objtselect.options[0];
0
mchiicha > NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013
18 mars 2009 à 15:19
Autant pour moi j'ai rectifié l'indice 1 en 0 mais ça ne regle pas le pb :(
quand je regarde le dernier élément de ma liste c'est 'undefiend' donc il parcourt toute la boucle jsuqu'au dernier élément qui est undefined et il bloque
j'ai donc arrêté la boucle avant le dernier élément pour voir ce que ça allait donner d'où mon for (var i=0; i<display_list2.length-2; i++) mais tjrs mm erreur 'undefined' a la valeur NULL ou n'est pas un objet
0