Poczekaj na metodę jquery .html, aby zakończyć renderowanie
Mam div z pionowym paskiem przewijania. Div jest aktualizowany dynamicznie przez ajax, a HTML jest wstawiany za pomocą metody .html jQuery. Po zaktualizowaniu div pasek przewijania powraca do góry i próbuję utrzymać go w poprzedniej pozycji.
W ten sposób próbuję:
var scrollPos = $('div#some_id').scrollTop(); //remember scroll pos
$.ajax({...
success: function(data) {
$('div#some_id').html(data.html_content); //insert html content
$('div#some_id').scrollTop(scrollPos); //restore scroll pos
}
});
To się nie powiedzie. Domyślam się, że zawiodło to z powodu nie wstawionego kodu HTML (tzn. Bez przewijania).
Na przykład to działa.
setTimeout(function(){
$('div#some_id').scrollTop(scrollPos);
}, 200);
Ale moim zdaniem jest to brudny hack. Nie mam pojęcia, że niektóre przeglądarki nie potrzebują więcej niż te 200 ms do renderowania wstawionej treści.
Czy istnieje sposób, aby poczekać, aż przeglądarka zakończy renderowanie wstawionego HTML przed kontynuowaniem?