Событие для вызова функции JavaScript, когда innerHTML завершен на 100% - PullRequest
2 голосов
/ 23 ноября 2011

Я быстро просмотрел заголовок Google и получил весь этот код, который не понял ни слова.

Я уже пару лет программирую на JavaScript и чувствую себя комфортнобольшинство понятийЗа исключением обработки событий.Это пугает меня!

проблема

У меня есть div, для которого я написал скрипт, который прокручивает div по вертикали исключительно на основе положения мыши.

Я получаю высоту контейнера и высоту внутреннего контейнера, который будет «переполнен».

делим их, чтобы получить «дифференциал», а затем умножаем положение мыши на этот дифференциал, чтобы получитьdiv для прокрутки в зависимости от положения мыши.

Это дает мне хорошую чистую прокрутку!

(если кому-то нужна дополнительная информация по этому вопросу, просто спросите)

Моя проблема в том.Содержимое этого div генерируется ajax.

Поэтому, когда запускается код для вычисления высоты как внутреннего, так и внешнего div, он дает неверную высоту, так как они еще не заполнены данными.

ТАК, мне нужно запустить функцию, когда ajax скопировал данные в innerHTML для вызова функции mousescroll.

extra

проблемы: у меня естьдва вызова ajax, которые заполняют прокручиваемый div.и иногда один выбирается раньше другого, и наоборот.Поэтому мне нужна функция mousescroll, чтобы запускать КОГДА и только КОГДА оба вызова ajax полностью ввели все данные в html, что они могут!

Я думал просто добавить setTimeout, но ...не заставляю мои сценарии ждать!

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Исходя из вашего описания, вам нужно обработать ajax в событии успеха jQuery, а затем обработать фактическое событие "complete" в вашем коде после того, как два события ajax завершены и обработаны должным образом согласно вашему требованию.

1 голос
/ 23 ноября 2011

Я не уверен на 100%, где проблема.Вы пишете: «Мне нужно запустить функцию, когда ajax скопировал данные в innerHTML для вызова функции mousescroll».- Вам нужна помощь с этой частью?Если вы используете jQuery, то вы просто вызываете функцию mousescroll внутри функции success обратного вызова $.ajax.

Как вы указали, однако, это осложняется другой проблемой, которую вы подняли: на самом деле есть два вызова Ajax, и вы хотите, чтобы они оба завершили до вызова функции mousescroll.Чтобы решить эту проблему, просто создайте переменную, равную нулю, а затем увеличьте ее в пределах обоих success обратных вызовов.Эти обратные вызовы также проверяют значение переменной и, если оно равно 1 (что означает, что вызов Ajax уже завершен), вызывают функцию mousescroll.

псевдокод:

var numOfAjaxCalls = 0;

$.ajax({
    ...
    success: function(){
        if(numOfAjaxCalls = 1){
            mousescroll();
        }else{
            numOfAjaxCalls++;
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...