InnerHTML incompatible IE

Résolu
mchiicha -  
 jorge -
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   Statut Membre Dernière intervention   514
 
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
mchiicha
 
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   Statut Membre Dernière intervention   514 > mchiicha
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   514 > mchiicha
 
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   Statut Membre Dernière intervention  
 
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