Событие огня после того, как весь Javascript завершил выполнение - PullRequest
0 голосов
/ 20 марта 2009

У меня есть страница, которая использует много вычислений JavaScript, когда страница загружается. Это может заблокировать страницу на несколько минут в зависимости от того, сколько расчетов выполнено.

Я могу открыть модальное окно jquery при загрузке страницы. Затем запускаются функции расчета, а затем, когда они заканчивают работу, они должны закрыться.

Проблема в том, что окно закрывается почти сразу после его отображения. Код, который я использую здесь:

// In page startup functions
$(document).ready(function() {
    // Initialise Modal
    $('#dialog').jqm({ modal: true });
    // Show Modal box
    $('#dialog').jqmShow();
    // Call all the startup functions and then hide the modal box
    // once they have all completed.
    StartUpCall((function() { $('#dialog').jqmHide(); })())
});

Есть ли событие, которое запускается jQuery после завершения всего javascript? Это был бы первый приз для меня.

Редактировать: я использую jqModal - http://dev.iceburg.net/jquery/jqModal/

Ответы [ 3 ]

1 голос
/ 20 марта 2009

Я бы использовал глобальную переменную и функцию обратного вызова. Глобальная переменная является либо счетчиком, либо массивом строк. В начале каждого вычисления либо увеличивайте счетчик, либо добавляйте уникальную строку в массив, а в конце каждого вычисления уменьшайте счетчик или удаляйте уникальную строку и вызывайте функцию, которая проверяет счетчик == 0 или array.length == 0, в этот момент вы скрываете свой диалог.

0 голосов
/ 02 ноября 2009

После того, как вы откроете модальное диалоговое окно, используйте setTimeout () для вызова вашего кода, интенсивно использующего процессор. Скрытие должно быть в конце этого кода (код, интенсивно использующий процессор, а не код вызова). Вы можете использовать 0 для задержки в setTimeout. Работает только один поток JavaScript (игнорируя WebWorkers.)

Имейте в виду, что в разных браузерах допускается разная длительность выполнения сценария, прежде чем он выдаст предупреждение «сценарий не отвечает» Возможно, вам придется разбить ваши расчеты на куски, запущенные setTimeout. IIRC, IE6 (у которого болезненно медленный JS, усугубляющий проблему) очень быстро отключится.

0 голосов
/ 20 марта 2009

Я не уверен, что понимаю ваш вопрос, и название также сбивает с толку. Вы уверены, что вычисления выполняются синхронно? Вы используете Ajax звонки? Если да, то вызов Hide будет выполнен до окончания вычислений.

В любом случае, jQuery поддерживает пользовательские события, которые вы можете создавать и запускать программно. Взгляните на эту ссылку , например. Это было бы элегантным решением для вашей ситуации. Поскольку вы также можете отправлять параметры вместе с событиями, вы также можете легко обновить статус модального диалога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...