jquery — нежелательный эффект распространения

#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, предотвращая уведомление любых родительских обработчиков о событии.

Надеюсь, это поможет.