Probleme avec la mise en bas d'un SCROLL

saca35 Messages postés 1 Date d'inscription mardi 1 septembre 2015 Statut Membre Dernière intervention 1 septembre 2015 - Modifié par kazma le 2/09/2015 à 11:08
@karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024 - 2 sept. 2015 à 11:13
Bonjour,

Je suis en train de faire un chat php/Ajax
lorsque l'on ajout un fil de discussion, je voudrais que le scroll se place au plus bas de manière à voir les dernières contributions.

voici un bout de mon code
(...)
xhr.send("Texte="+variable);
       alert('ok');
    var objDiv = document.getElementById("encours");
       objDiv.scrollTop = objDiv.scrollHeight;
    document.getElementById("Texte").focus();
    document.getElementById("Texte").value='';


je lance mon ajax
je met un dialogue ALERT(ok)
j'utilise scrollTop
je met le focus sur mon input pour continuer la conversation.

Tout fonctionne
mais lorsque j'enlève le ALERT(ok)
mon scrollTop n'est plus fonctionnel car il se met en position n-1

Pourquoi il y a une différence avec le ALERT()
comme si le système avait besoin d'un temps de pause pour finir l'ajax et correctement positionner le scroll.
j'ai essayé avec une pause d'une seconde (boucle) mais j'ai le même soucis.

Donc le ALERT() induit un comportement nécessaire et bien évidemment je ne veux pas de ALERT()

j'ai essayé objDiv.scrollTop = 10000; pour voir s'il fallait forcer une variable plus grande -> pas de différence.

Je sèche quand à ce comportement étrange.

Si quelqu'un à une piste, je suis preneur.

1 réponse

@karamel Messages postés 1855 Date d'inscription vendredi 9 mai 2008 Statut Modérateur Dernière intervention 18 avril 2024 153
2 sept. 2015 à 11:13
bonjour

tu n'attend pas que la requette soit terminé il faut utiliser l'evenement onreadystatechange

xhr_object.onreadystatechange=function() {

if (xhr_object. readyState ==  4 && xhr.status == 200{

 var objDiv = document.getElementById("encours");
       objDiv.scrollTop = objDiv.scrollHeight;
    document.getElementById("Texte").focus();
    document.getElementById("Texte").value='';
}
}

0
Rejoignez-nous