Rechercher : dans
Par :

InnerHTML incompatible IE

Dernière réponse le 19 mar 2009 à 09:52:26 mchiicha, le 18 mar 2009 à 13:12:16 
 Signaler ce message aux modérateurs

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.getElementByI­d(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!

Configuration: Windows XP
Firefox 3.0.7

Meilleures réponses pour « innerHTML incompatible IE » dans :
Désinstaller IE 8 VoirDésinstallation d'IE 8 Vous avez installé IE8 pour le tester et vous souhaitez désormais revenir à une version précédente ? Voici la procédure à suivre pour les OS suivants : Windows Vista Windows XP Windows Vista Ouvrir le...

1

NookZ, le 18 mar 2009 à 14:23:27

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!"

Répondre à NookZ

2

mchiicha, le 18 mar 2009 à 14:43:04

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!

Répondre à mchiicha

3

NookZ, le 18 mar 2009 à 14:47:32

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_s­elect_add.html

Répondre à NookZ

4

mchiicha, le 18 mar 2009 à 15:08:09

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

Répondre à mchiicha

5

NookZ, le 18 mar 2009 à 15:11:03

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];

Répondre à NookZ

6

mchiicha, le 18 mar 2009 à 15:19:49

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

Répondre à mchiicha

7

mchiicha, le 18 mar 2009 à 15:30:55

Est ce que j'ai bien fait de reprendre l'exemple du
http://www.aliasdmc.fr/dom_javascript_html/javascript_html_s­elect_add.html
car moi j'ai pas les options écrites explicitement dans mon select mais elles viennet s'afficher après un traitement du coup mon select ne contient aucune option :
<select id="country_table" name="country" onchange="refresh_operator_list()" ></select>

o_O !!!

Répondre à mchiicha

8

NookZ, le 18 mar 2009 à 15:38:04

Je n'arrive pas à trouver beaucoup de doc sur le select.add
mais j'ai trouvé ça, je pense que ce sera plus simple :
http://www.toutjavascript.com/main/gorun.php3?s=liste

Répondre à NookZ

9

mchiicha, le 18 mar 2009 à 15:39:43

L'erruer su r le 'undefined' a disparu en effet en enlevant la condition if(!document.all) mais j'en ai une autre qui apparait du même genre:
'options' a la valeur NULL ou n'est pas un objet

au niveau de before= objtselect.options[0];
et je me demande si ce n'est pas justement le fait que je n'aie pas d'options explicitement ecrites dans mon select (je peux pas toutes les taper j'ai un js qui fait ce traitement psk y en a un paquet!!)

HELP

Répondre à mchiicha

10

NookZ, le 18 mar 2009 à 15:41:16

Je te conseille de changer de méthode et d'explorer le lien au-dessus car la méthode add n'est utile que si tu as des éléments options déjà créés.

Répondre à NookZ

11

mchiicha, le 18 mar 2009 à 15:55:27

Le souci c'est que je ne trouve pas d'autre méthode adaptée pour le SELECT ya que le add qui permet d'ajouter des optios :s

Répondre à mchiicha

12

NookZ, le 18 mar 2009 à 16:01:43

As-tu récupéré le script dans le lien que je t'ai donné?

Répondre à NookZ

13

mchiicha, le 18 mar 2009 à 16:10:57

Oui je l'ai integré dans ma boucle comme suit:
for (var i=0; i<display_list2.length-2; i++) {
var oOption = document.createElement("OPTION");
oOption.text="Option: " + i;
oOption.value=display_list2[i];
before = objtselect.options[0]; <-- ça bloque ici options il aime pas :s
alert(before);
objtselect.add(oOption,before);

Répondre à mchiicha

14

NookZ, le 18 mar 2009 à 16:20:59

Je pense que le plus simple puisque tu veux vraiment utiliser add, c'est de créer une option que tu peux très bien appeler Choix de la liste ou un truc comme ça.

Ca te donnera un affichage comme les deux listes de cette page http://www.thelin.net/laurent/labo/js/listesderoulantes.html­

Répondre à NookZ

15

mchiicha, le 18 mar 2009 à 16:21:05

J'ai modifié la boucle comme suit:

for (var i=0; i<display_list2.length-2; i++) {
objtselect.options[i] = new Option(i,i);
objtselect.options[i].text="Option: " + i;
objtselect.options[i].value=display_list2[i];

before = objtselect.options[0];
objtselect.add(objtselect.options[i],before); (***)
}

et j'ai l'erreur suivante : le type ne correspond pas au niveau de (***)

Répondre à mchiicha

16

NookZ, le 18 mar 2009 à 16:22:49

Pourquoi avoir mis (***)?

Répondre à NookZ

17

mchiicha, le 18 mar 2009 à 16:33:03

^^ j'ai mis les (***) juste pour te montrer la ligne qui planter mais ça ne figurait pas dans mon code ^^
Sinon là ça marche nickel! je te remercie pour tes conseils

Répondre à mchiicha

18

NookZ, le 18 mar 2009 à 16:46:05

Tu peux me donner la vraie erreur, le texte brut?

Répondre à NookZ

19

jorge, le 19 mar 2009 à 09:51:30

Voici le code modifi& (celui qui marche mnt!):
reg4 = new RegExp("country_table","g");

if(display_destination[1].match(reg4)){

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

// Received data are loaded in list
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;

// transform display_list2 into a new string without tags <option> </option>
display_list2=display_list2.replace(reg1,"");
display_list2=display_list2.split(reg2);
if(display_destination[1].match(reg4)){

//Add options to the country table select
for (var i=0; i<display_list2.length-2; i++) {
var option_coun = document.createElement("OPTION");
option_coun.text=display_list2[i];
document.all.country_table.add(option_coun);
}
}

Répondre à jorge

20

 jorge, le 19 mar 2009 à 09:52:26

Désolée le msg précédent était bien de moi "mchiicha" j'avais pas changé le pseudo ^^
Bonne jouirnée!

Répondre à jorge