#javascript #jquery #jquery-events #blockui
#javascript #jquery #jquery-события #blockui
Вопрос:
Я использую block ui для блокировки страницы и захвата некоторой информации:
В разделе сообщений у меня есть 2 кнопки. ОК и отмена.
Если я установлю события щелчка при загрузке страницы:
$('#title-picker input[name=ok]').click(ok);
$('#title-picker input[name=cancel]').click(cancel);
События не запускаются после вызова $.blockUI
. Однако, если вместо этого я использую .live
метод, он работает так, как задумано.
$('#title-picker input[name=ok]').live('click',ok);
$('#title-picker input[name=cancel]').live('click',cancel);
Я предполагаю, что механизм, который он использует, удаляет и добавляет div в DOM, и это, должно быть, то, что отключает исходные обработчики событий. Я использовал более ранние версии block ui раньше, и это не делало этого. И я не вижу ничего очевидного в документации.
Итак, верны ли мои рассуждения?
И есть ли какие-либо недостатки в использовании .live
, т. Е. есть ли лучшее решение для того, что у меня есть выше?
Комментарии:
1.
.live
присваивается текущим и будущим динамическим элементам при условии, что они соответствуют селектору, где as.click
собирает только текущие элементы и прикрепляет к ним событие, поэтому, если в будущем вы создадите элемент и попытаетесь щелкнуть по нему с помощью.click
, это не сработает.
Ответ №1:
вы можете использовать делегирование вместо live
$('#title-picker').delegate('input', 'click', function(){
if (this.name == 'ok') {
ok();
} else {
cancel();
}
//or even:
// window[this.name]();
//if needed use the scope where your functions are defined
//instead of the window element
});
p.s.: в документации упоминается, что :
Что изменилось в версии 2 плагина BlockUI?
Elements are no longer removed from the DOM when unblocking