Сценарий похож: я использую JQuery для реализования некоторых ajax опций. Например: когда пользователь нажимает кнопку, "получают данные", JQuery вызовет функцию .ajax для выборки некоторых данных из сервера. Этот процесс мог бы занять время, таким образом, я добавил .ajaxSend и функции .ajaxComplete для показа некоторой анимации для ожидающего процесса (на самом деле 'Загружающиеся Данные' gif в отделении с z-индексом: 999, чтобы быть вершиной других отделений в). Во время ожидающего процесса ('Загружающиеся Данные'), я хотел бы предотвратить пользователей для нажатия других кнопок (например: у Меня есть другие вкладки, кнопки ниже маленьких 'Данных Загрузки' gif). Путем я достиг, это:
$("body").ajaxSend(function()
{
$(this).append('<div id="loading">Data Loading<\/div>');
$("div#error").remove();
$(this).children().not('#loading').css({'opacity':0.22});
});
$("body").ajaxComplete(function()
{
$("div#loading").remove();
$(this).children().not('#loading').css({'opacity':1});
});
Однако я не думаю, изменяя непрозрачность, лучший способ. Если Вы не делаете непрозрачность к 0, пользователи могут все еще нажать на другие кнопки/вкладки. Я не знаю, как полностью избежать какого-либо взаимодействия с пользователем во время этого процесса?Спасибо!!
Я использовал jQuery Block UI с хорошим успехом в прошлом. Хорошо работает с Ajax:
http://malsup.com/jquery/block/
может стоить использовать такое плагин, как это, вместо того, чтобы Handcoding подобное решение ...
Сделать видимый div с z-индексом выше всего другого. OnSucess, скрыть это.
Для IE6 рассмотрим видимость выбора входов
Я использую вариант трубопроводов AJAX Ben Nadel . По сути, он оборачивает звонок jQuery $ .ajax с объектом, который может записывать исходящие запросы AJAX.
Когда запрос AJAX выходит, вы записываете имя запроса. Если какие-либо еще запросы пытаются выйти с тем же именем, вы не выполняете его (необязательно предоставление сообщения пользователю).
См. Ответы на CSS / JavaScript Используйте Div, чтобы затенять раздел страницы .