Использование плагина jQuery BlockUI при навигации по странице (событие выгрузки)

У плагина jQuery BlockUI есть очень интересная функция, позволяющая присоединяться к каждому вызову AJAX с помощью простого кода. :

$(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);

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

Я думаю, это нужно делать с помощью события unload, но у меня не получилось.

$(window).on('unload', function()
{
    $.blockUI;
});

При навигации оверлей blockUI не появляется (мне не нужно его скрывать, потому что на новой загруженной странице его не будет).

Я даже могу:

$(window).on('unload', function()
{
    console.log('$.blockUI;');
    $.blockUI;
    console.log('Bye!');
});

и я ясно вижу сообщения $.blockUI; и Bye! в консоли, но никаких признаков наложения blockUI.

Я читал, что многие браузеры блокируют отображение alert() в unload. Он также распространяется на blockUI? Этого не должно быть, поскольку это просто набор div или других элементов DOM плюс некоторые стили?

Протестировано в Chrome 27, Internet Explorer 10 и Firefox 21. Что я упускаю или делаю неправильно?

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


person trejder    schedule 28.06.2013    source источник


Ответы (1)


Я думаю, есть две проблемы. Я думаю, что первая проблема заключается в том, что вам нужно вызвать функцию $.blockUI(), чтобы получить желаемый результат.

Вторая проблема заключается в том, что событие кажется слишком запоздалым. Рассмотрим beforeunload событие:

$(window).on('beforeunload', function()
{
    $.blockUI();
});

Я создал jsfiddle, который использует событие beforeunload, и он работает очень хорошо.

person straeger    schedule 02.07.2013
comment
Вы правы в обоих. Спасибо за очень хорошие (но простые! :]) и быстрые ответы. - person trejder; 02.07.2013
comment
Есть еще одна проблема, но я ее разделил в отдельный вопрос. Может, и с этим поможете? - person trejder; 02.07.2013