Autor Zpráva
Boris Zátopka
Profil *
Dobrý deň,

chcel by som sa spýtať, či by mi niekto neporadil s nasledovným problémom.
Mám jednoduchý skript, ktorý mi zapíše do DB príspevok a následne sa načítaju príspevky do divu. Tanto div má scroller, neviem docieliť aby po načítaní divu bol scroller na spodnej časti divu. (kedže listujem príspevky od najstarších, novšie sú dole, chcem aby bola pozícia scrollera nastavená dole). Je problém vo výpočte výšky, ktorý zbehne ešte pred zápisom. Asi bute lepšie pozrieť skript.

takto vypadajú skripty:
v súbore mám jednoduchý formulár s textarea id="comment" a button class="button"

nad formulárom div:

<div id="responsecontainer" style="max-height:200px;width:200px;overflow-x:hidden;">
    <?php include "response.php"; // select prispevkov z DB ?>
</div>

a samotný (zjednodušený) JS:

    $(function() {
        $(".button").click(function() {
            var comment = $("textarea#comment").val();
            var dataString = 'comment='+ comment;

            $.ajax({
                type: "POST",
                url: "process.php", // insert prispevku
                data: dataString,
                success: function(data) {
                    loadDiv();
                }
            });

            return false;
        });
    });

takto vypadá loadDiv() funkcia:

    function loadDiv(){
        $("#responsecontainer").load("response.php");
        $("#responsecontainer").scrollTop($("#responsecontainer")[0].scrollHeight); // posun scrollbaru na spodok divu
    }

Problém je, ako som v úvode spomenul, ze $("#responsecontainer")[0].scrollHeight ako keby vyráta starú výšku (scrollbar sa posunie pekne, ale na predposledný príspevok). Dôkazom su aj alerty: alert( $("#responsecontainer")[0].scrollHeight );
na začiatku dokumentu a fo funkcii loadDiv() po $("#responsecontainer").load("response.php");
čiže:

    function loadDiv(){
        $("#responsecontainer").load("response.php");
        alert( $("#responsecontainer")[0].scrollHeight );
    }

ktore vyhodia rovnakú hodnotu :/ čo by nemali, keďže sa výška zmení.
Snáď som problematiku opísal dostatočne.
Budem rád za každý postreh. ďakujem
Chamurappi
Profil
Reaguji na Borise Zátopku:
AJAX funguje asynchronně (to je to první áčko), což platí i pro funkci load — nemůžeš změřit správnou velikost dřív, než doteče obsah ze serveru.
Vůbec teda nechápu, proč po toho prvního POST požadavku posíláš další. Nevidím důvod vysílat při jedné akci uživatele víc různých dotazů na server…

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: