Probleme avec scrollTo in IE 6.0

Signaler
Messages postés
7
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
19 décembre 2005
-
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005
-
Bonjour

Voila plusieurs jours que je cherche a resoudre ce probleme.

J'utilise un script javascript pour mettre en couleur les mots tapes par l'utilisateur dans mon formulaire. Lorsque celui-ci tape Entree, la page est rechargee pour prendre en compte les mots cles a mettre a en couleur.
Pour plus de clarte, je souhaite que la page, une fois rechargee, 'saute' directement a l'endroit ou l'utilisateur se trouvait. J'utilise donc pour cela la fonction scrollTo(X,Y) qui utilise les variables X et Y que je passe dans l'URL.

Mon probleme? IE semble toujours 'sauter' au meme endroit sur la page (par exemple (0,233) pour une page donnee) alors q les valeurs passees a la fonction scrollTo sont justes!
Autre chose: ca marche parfaitement avec Mozilla!

Y'a-t-il un bug avec IE?

Merci pour votre aide. Voici le code:




function getScrollCoords()


{


// Dealths with IE


if (document.all) {


if (!document.documentElement.scrollLeft) {


scrollX = document.body.scrollLeft;


}


else {


scrollX = document.documentElement.scrollLeft;


}


if (!document.documentElement.scrollTop) {


scrollY = document.body.scrollTop;


}


else {


scrollY = document.documentElement.scrollTop;


}


}


// All other browsers


else {


scrollX = window.pageXOffset;


scrollY = window.pageYOffset;


}


alert('Ds getScrollCoords X=' + scrollX + ' Y=' + scrollY);


}





function setScrollPosition()


{


var coordIndex = window.location.href.indexOf('&xy=');


// check if there are scroll coord


if(coordIndex>0){


var coords = ( window.location.href.indexOf('&xy=') + 1 ) ? window.location.href.substr(window.location.href.indexOf('&xy=') + 4) : "";


xy = coords.split(',');


window.scrollTo(Number(xy[0]),Number(xy[1]));


alert('Ds setScrollPosition: X=' + xy[0] + ' Y=' + xy[1]);


}


else {


// do nothing


return true;


}


}

8 réponses

Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005

Utiliser des ancres nommées ne serai pas plus simple?
Messages postés
7
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
19 décembre 2005

Je comprends ta solution mais ce n'est pas ce q je recherche.
En effet tu peux etre au milieu d'un paragraphe et ce q je veux c rester au mm endroit. Et puis comment savoir quelle ancre est la plus proche de tte facon si je voulais utiliser ton idee?

Merci qd mm
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005

si c'est IE qui cloche !
Je pense que !document.documentElement.scrollLeft ne te donnera pas forcément le bon branchement si le scroll est à 0.
Je préfère modifier comme ceci :


// Dealths with IE
dtd= document.compatMode=="CSS1Compat"?1:0;// détection dtd correct
if (document.all) {
if (!dtd) {
scrollX = document.body.scrollLeft; ...
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005

Tu doit avoir en début de ta page un doctype avec une DTD pointant sur le site
du W3c. C'est trés bien, IE6 et Opéra 7 (document.all) respectent mieux les
standards. J'ai une formule encore plus simple :


if (!document.documentElement.width) {


scrollY = document.body.scrollTop;


}

document.documentElement.width aura toujours une valeur supérieur à 100, car IE n'accepte pas que la fenêtre soit plus petite.
Messages postés
7
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
19 décembre 2005

Merci bcp pour ta reponse mais je dois malheureusement conclure q ca ne marche toujours pas!

J'ai ajoute la dtd et modifier mon code comme suit mais rien a faire :
var dtd ( document.compatMode "CSS1Compat") ? 1 : 0 ;
if (document.all) {
if (!dtd) {
scrollX = document.body.scrollLeft;
}
else {
scrollX = document.documentElement.scrollLeft;
}


if (!dtd) {
scrollY = document.body.scrollTop;
}
else {
scrollY = document.documentElement.scrollTop;
}
}

Ta reponse semblait plus orientee sur le scrollX q sur Y donc je me suis peut etre mal fait comprendre mais c bel et bien le scroll vertical qui cloche!

Merci encore pour ta reponse.
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005

le test le test doit être lancé en fin de chargement ou par "onload"
un exemple :
http://www.javascriptfr.com/code.aspx?id=26931
Messages postés
7
Date d'inscription
lundi 1 novembre 2004
Statut
Membre
Dernière intervention
19 décembre 2005

Oui, c'est ce que je fais, mais rien a faire!
Messages postés
544
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
20 mai 2005

Il y a forcément une erreur, Tu n'aurai pas une url avec la page entière, montre le source complet ici