BlockUI в DOM готов

#jquery #document-ready #blockui

#jquery #документ готов #blockui

Вопрос:

Я использую плагин jQuery BlockUI для добавления заставки загрузки на страницу, загрузка которой занимает несколько секунд из-за запросов CAML. Проблема в том, что страница загружается до того, как BlockUI отобразится на долю секунды и исчезнет. Похоже, что JS выполняет их в неправильном порядке, и я не могу понять, почему. Есть ли что-то, что я могу изменить в коде, или BlockUI просто не предназначен для использования без Ajax?

 $(document).ready(function() {
    $.blockUI();
});
$(window).ready(function() {
    $.unblockUI();
});
  

В заголовке html я вызываю jquery, blockui и common.js скрипт, содержащий запросы CAML и загружающий элементы страницы (в таком порядке). The common.js скрипт также запускается на DOM ready, что, как я подозреваю, может быть частью проблемы…

Ответ №1:

Попробуйте это:

 <html>
    <head>
        <script src="jquery.js"></script>
        <script src="blockui.js"></script>
        <script type="text/javascript">
            $.blockUI();
        </script>
    </head>
    <body></body>
</html>
  

Это должно блокировать пользовательский интерфейс до того, как будет загружено что-либо еще.

Редактировать: Хорошо, я потрудился на самом деле посмотреть … $.blockUI поддерживает функцию обратного вызова.

Итак, вы могли / должны сделать это:

 $(document).ready(function() {
    $.blockUI({
        onBlock: function() { 
            // Invoke your CAML stuff here.
        }
    });
});
  

Комментарии:

1. Ну, мне не нужно было отрывистое замечание — не то чтобы я сам не удосужился прочитать документацию, но то, что вы предлагаете, отлично работает. Спасибо.

2. @kramden88 Я совсем не хотел показаться грубым 😉 Рад, что это сработало для вас.

3. Я борюсь с этим уже несколько дней! Спасибо! Лень читать, как ты 🙂

4. @vzwick Он работает некорректно в IE8. Блокировка страницы, но сообщение Div не отображается вообще, пока скрипты не завершат загрузку. Есть какие-либо обходные пути для IE8?