Blockui отключает события

#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