Javascript + DOM + IE8 + incmpatibilité
Résolu/Fermé
A voir également:
- Javascript + DOM + IE8 + incmpatibilité
- Ie8 - Télécharger - Navigateurs
- Telecharger javascript - Télécharger - Langages
- Javascript echo ✓ - Forum PHP
- Afficher un tableau javascript en html ✓ - Forum Javascript
- Javascript est activé mais ne fonctionne pas ✓ - Forum Réseaux sociaux
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
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