Как отобразить диалоговое окно jquery до загрузки всей страницы? - PullRequest
7 голосов
/ 27 марта 2009

На моем сайте ряд операций может занять много времени.

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

В идеале я хотел бы сказать что-то вроде:

$("#dialog").show("progress.php");

и наложение на верхней части загружаемой страницы (исчезает после завершения операции).

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

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

Вот простой пример, иллюстрирующий проблему. Приведенный ниже код не отображает диалоговое окно до истечения 20-секундной паузы. Я пробовал в Chrome и Firefox. На самом деле я даже не вижу текст «Пожалуйста, подождите ...».

Вот код, который я использую:

<html>
  <head>
      <link type="text/css" href="http://jqueryui.com/latest/themes/base/ui.all.css" rel="stylesheet" />
    <script type="text/javascript" src="http://jqueryui.com/latest/jquery-1.3.2.js"></script>
    <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.core.js"></script>
    <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.dialog.js"></script>

  </head>
  <body>
    <div id="please-wait">My Dialog</div>
    <script type="text/javascript">
      $("#please-wait").dialog();
    </script>
    <?php
    flush();
    echo "Waiting...";
    sleep(20);
    ?>
  </body>
</html>

1 Ответ

10 голосов
/ 27 марта 2009

Вам нужно будет запустить этот фрагмент кода сразу после тега , например:

<html>
  <head>
  </head>
  <body>
    <div id="please-wait"></div>
    <script type="text/javascript">
      // Use your favourite dialog plugin here.
      $("#please-wait").dialog();
    </script>
    ....
  </body>
</html>

Примечание. Я пропустил традиционный $ (function () {}), потому что он необходим для загрузки сразу после показа страницы, а не после загрузки всего DOM.

Я делал это раньше и отлично работает, даже если страница еще не загрузилась.

EDIT: вы должны быть уверены, что используемый вами плагин диалога jQuery загружает до всей загрузки DOM. Обычно это не так, у вас это не сработает. В этом случае вам нужно использовать простое простое решение JavaScript, такое как Lightbox 1 или Lightbox 2 .

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