2015-04-23 1 views
2

Я использую jquery BlockUI-плагин для блокировки экрана при выполнении запроса. По умолчанию я устанавливаю его для каждого вызова ajax. Но у меня также есть модули Bootstrap, которые загружают данные внутри, используя ajax.Не используйте blockUI при открытии модального диалогового окна начальной загрузки

$(document) 
.ajaxStart(function() { 
    $.blockUI({ 
     message: $('#img-loader'), 
     css: { 
      border: 'none', 
      padding: '5px', 
      'background-color': 'transparent', 
      '-webkit-border-radius': '10px', 
      '-moz-border-radius': '10px', 
      opacity: .6, 
      color: '#fff', 
      cursor: 'wait' 
     } 
    }); 
}) 
.ajaxStop($.unblockUI); 

Проблема - при открытии модального экрана становится темным (применяется 2 блокаUI). Как я могу разблокировать UI, когда модальный открыт (используйте только блокиратор фона Bootstrap)?

Что я пробовал:

$('.modal').on('shown.bs.modal', function() { 
    $.unblockUI(); 
}); 

ИЛИ

$('.modal').on('show.bs.modal', function() { 
     $.unblockUI(); 
    }); 

, но это не сработало. Кажется, что блок блока блока BlockUI немного позже.

+0

Покажите нам код, который делает «По умолчанию я установить его для каждого вызова Ajax» –

+0

@AaronDigulla, пожалуйста, проверьте обновления – demo

ответ

1

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

К сожалению, you can't access the details of the AJAX request from the ajaxStart handler. В противном случае я предлагаю передать дополнительный вариант, например blockUI: true, на запрос, который затем использовал обработчик.

Вместо этого вам нужно будет переместить код для $.blockUI({...}); в вспомогательную функцию (чтобы вам не приходилось писать ее каждый раз). Теперь вы должны вызвать эту вспомогательную функцию каждый раз, когда вы делаете вызов AJAX, где вы хотите заблокировать пользовательский интерфейс. Хорошим местом для вызова новой вспомогательной функции является the beforeSend callback.

+0

добавить такую ​​функцию для blockUI: '$ .fn.esrbBlockUI = функция() { \t $. blockUI ({ \t \t сообщение: $ ('# IMG-погрузчик'), \t \t CSS: { \t \t \t границы: 'никто', \t \t \t обивка: '5px', \t \t \t «фон -colo г ': 'прозрачными', \t \t \t '-webkit-граница радиуса': '10px', \t \t \t '-moz-границы радиуса': '10px', \t \t \t непрозрачности: 0,6, \t \t \t цвет: '#fff', \t \t \t курсор: 'ожидание' \t \t} \t}); } 'на каждом этапе beforeSend в ajax-вызове, но не в каждом запросе этот блок работает ... получите некоторую ошибку« Uncaught TypeError: Невозможно прочитать свойство «parentNode» неопределенного »в блоковой библиотеке. Так что не знаю, что делать – demo

+0

Мое первое предположение было бы проблемой с '$ ('# img-loader')'. Если это не так, вам придется получить несжатую версию blockUI и отладить проблему. –

+0

хорошо, да, это была моя ошибка ... теперь, похоже, все в порядке. И спасибо за ваш ответ – demo

Смежные вопросы