Javascript + DOM + IE8 + incmpatibilité

Résolu/Fermé
dav79 - 13 oct. 2010 à 13:14
 dav79 - 14 oct. 2010 à 20:01
Bonjour,

Je rencontre un problème, pour parcourir les éléments du formulaire avec les objets DOM;
Je n'arrive pas à exécuter ce script avec IE8, alors que ça marche avec Chrome et FireFox.

IE8 affiche une erreur javascript permission refusé, j'ai cherché sur Internet, mais je ne trouve pas de réponse qui résou ce problème, j'ai essayé de modifé des paramètres dans l'onglet sécurité de IE, mais cela n'y fait rien.

Mon système tourne sur XP Pro SP2.

Voici le script est le suivant



<script language="javascript">
function validerFRM(frmFORM){
for (var i = 0; i < frmFORM.elements.length; i++) {
document.writeln("<BR>Name " + frmFORM.elements[i].name);
}
}

</script>


<!-- Formulaire à parcourir -->
<form name="frmFicheParticip" method="GET" action="">
<!-- champ caché -->
<input name="validerFORM" type="hidden" value="" />
<input name="txtTest" type="text" value="" />
<input name="chkSponsors" type="checkbox" value="val1" />
<input name="chkSponsors" type="checkbox" value="val2"/>
<input name="chkSponsors" type="checkbox" value="val3" />
<input name="bttSelectSupp" type="button" value="Supprimer" onclick="validerFRM(frmFicheParticip); " />
</form>


Est ce quelq'un autrait une solution pour contourner cette incomptabilité.
Je vous serais très reconnaissant, merci.
A voir également:

3 réponses

Ok j'ai en fin trouvé l'explication sur un forum,

Je vous donne la solution avec son explication,


Le code est un problème, résumons ce que fait le code :
On parcours les éléments d'un <form> ça ok pas de soucis
mais pour chaque élément de ce form, on fais un document.write ou document.writeln. Quand on fais un document.write.. on écrases le dom existant par un nouveau DOM, ce qui fait que <form> n'existe plus, parcourir un élément qui n'existe plus, va provoquer cette erreur. Donc normal que IE8 renvoie une alerte
Le soucis, c'est le document.write qui est le problème, pour résoudre ce bug il l'une des solutions et de créer une div et utiliser la méthode innerHTML.

Ca fonctionne va FireFox et Chrome parceque quand on ajoute un élément avec write ces navigateurs ne vont pas ajouter le texte dans le source html et régénérer la page, mais juste généré le HTML à ajouter
pour en faire un segment DOM et chercher dans le source le point d'insertion
il vont alors retrouver dans le DOM l'élément correspondant au point d'insertion
et insérer le segment DOM





La solution est la suivante

Code :
<html>
<head>
<script type="text/javascript">
function validerFRM(frmFORM){
frmFORM.style.display="none";
for (var i = 0; i < frmFORM.elements.length; i++) {
document.getElementById('test').innerHTML+="<br />"+ frmFORM.elements[i].name;
}
}
</script>
</head>
<body>


<form name="frmFicheParticip" method="GET" action="">
<!-- champ caché -->
<input name="validerFORM" type="hidden" value="" />
<input name="txtTest" type="text" value="" />
<input name="chkSponsors" type="checkbox" value="val1" />
<input name="chkSponsors" type="checkbox" value="val2" />
<input name="chkSponsors" type="checkbox" value="val3" />

<input name="bttSelectSupp" type="button" value="Supprimer" onclick="validerFRM(this.form)" />
</form>
<div id="test"></div>
</body>
</html>


Merci encore à tous qui m'ont aider, j'espère que la solution vous aidera aussi
A+.

dav79
1
Je suis étonné que personne n'a jamais été confronté à ce problème, j'ai vraiment besoin de votre aide.
0
Ma question n'a pas claire, aucun membres n'a là réponse....
0