Conflit DOCTYPE avec la fonction javascript document.body.scrollTop sous IE7

ViPHP
AB
ViPHP | 5818 Messages

27 avr. 2008, 23:25

Bonjour,

Voilà, ce code fonctionne parfaitement avec FF mais pas avec IE7. J'ai remarqué qu'en enlevant la ligne DOCTYPE ça marche.
Mais bon ça m'enbête de supprimer cette ligne. Vous avez une solution, ou une explication ?

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans nom</title> <script type="text/javascript"> <!-- function position() { var y=0; if (window.pageYOffset) y = window.pageYOffset; else if (document.body && document.body.scrollTop) y=document.body.scrollTop; alert(y); } //--> </script> </head> <body> ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne<br />ligne <a href="javascript:position()">position du scroll vertical</a> </body> </html>

Mammouth du PHP | 19672 Messages

28 avr. 2008, 05:58

Voici un élément de réponse :

Code : Tout sélectionner

// Firefox ou IE sans doctype -OU- IE avec doctype HTML 4.0 scrollH = document.body.scrollTop; // ------------------------------------ // IE avec doctype XHTML 1.0 scrollH = document.documentElement.scrollTop;
Il faut donc avec IE tenir compte aussi de quel DOCTYPE est utilisé s'il y en a un. Ta fonction peut donc être modifiée comme suit :

Code : Tout sélectionner

<script type="text/javascript"> /* <![CDATA[ */ function position() { var y=0; if (window.pageYOffset) { y = window.pageYOffset; } else if (document.body && document.body.scrollTop) { y = document.body.scrollTop; } else if (document.documentElement && document.documentElement.scrollTop) { y = document.documentElement.scrollTop; } alert(y); } /* ]]> */ </script>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
AB
ViPHP | 5818 Messages

28 avr. 2008, 23:35

merci Cyrano.

Sinon tu l'a eu où l'information ? J'ai pris ma source dans selfhtml, mais visiblement il devait y avoir de meilleurs exemples. Et puis, damned, j'ai oublié comment faire chez eux pour avoir plus de résultats dans mes recherches...

Je met pas résolu tout de suite pour que tu lise mon message, mais c'est effectivement résolu!

Mammouth du PHP | 19672 Messages

29 avr. 2008, 06:23

Sinon tu l'a eu où l'information ?
Bien franchement, je sais plus trop. J'ai depuis quelques années ramassé tellement d'exemples de code un peu partout que j'ai maintenant des références diverses assez variées, et pour ce cas précis, j'en ai eu besoin l'an dernier pour un positionnement qui devait précisément tenir compte du défilement de la page et ce sous différents navigateurs.

Et tu peux mettre le [Résolu] ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: