Javascript - DOM - EI8 - incompabilité

dav79
Javascript - DOM - EI8 - incompabilité

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.

fredericmazue
Re: Javascript - DOM - EI8 - incompabilité

Si je comprends la question ce qui est étonnant c'est que ça marche avec d'autres navigateurs :shock:

Il me semble que tu réécris le formulaire à la volée avec document.write, tout en le parcourant. On peut imaginer que l'interpréteur ne s'y retrouve pas. Tu devrais plutôt utiliser à la place document.getElementById et modifier le contenu à travers la propriété innerHTML. Modifier l'élément au lieu de le réécrire brutalement.

En espérant que ça t'aide

dav79
Re: Javascript - DOM - EI8 - incompabilité

Je te remercie pour ta réponse fredericmazue, en effet le problème vient delà c'est document.write() qui pose problème, j'ai trouvé cette même réponse sur un autre forum. Voici la l'explication et la solution complête

Le code est un problème, résumons ce que fait le code :
On parcours les éléments d'un ç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 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 :


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

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

dav79