#jquery #listener #event-propagation
#jquery #прослушиватель #событие-распространение
Вопрос:
У меня есть живой слушатель в классе, который добавляет некоторый контент. Это каким-то образом вызывает этого прослушивателя повторно. Как я могу отключить распространение в этом случае?
SomeContent = "<p>Some content<p>";
moreContent = "<p>More content<p>";
$('.myClass').live('change', function (event){
var thisOption = $(this);
// event.preventDefault(); - does not work
// event.stopImmediatePropagation(); - does not work
var MyLocation = thisOption.closest('tr').next('tr');
// $(MyLocation).html("");
var thisTplReasons = $(moreContent);
thisTplReasons.appendTo(MyLocation).page();
return false;
});
Комментарии:
1. Jquery Mobile думает о том, чтобы динамически добавлять свой css «на лету». Я удалил его, но никакой разницы
Ответ №1:
Функция jQuery live имеет некоторые недостатки, задокументированные здесь. Интересной частью списка является это утверждение
Вызов event.stopPropagation() в обработчике событий неэффективен для остановки обработчиков событий, прикрепленных ниже в документе; событие уже распространилось на документ.
Вы должны использовать новый механизм jQuery «on» (смотрите здесь) вместо «live» и вызов event.stopPropagation() должен работать должным образом.
Ответ №2:
События сначала фиксируются до тех пор, пока не достигнут целевого элемента, а затем загружаются. Во время потока событий на событие можно отреагировать в любом элементе пути (наблюдателе) на любой фазе, вызвав действие и / или остановив событие (с помощью метода event.stopPropagation() для браузеров, соответствующих W3C, и команды event.cancelBubble = true для Internet Explorer) и / или отменив действие по умолчанию для события.
Также,
jQuery говорит
event.stopPropagation()
Описание: Предотвращает всплывание события в дереве DOM, предотвращая уведомление любых родительских обработчиков о событии.
Надеюсь, это поможет.