jquery - нежелательный эффект распространения - PullRequest
2 голосов
/ 14 ноября 2011

У меня есть живой слушатель в классе, который добавляет контент. Это как-то неоднократно вызывает этого слушателя. Как я могу отключить пропаганду в этом случае?

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;
});     

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Функция live jQuery имеет некоторые недостатки, задокументированные здесь .Интересная часть списка - это утверждение

Вызов event.stopPropagation () в обработчике событий неэффективен при остановке обработчиков событий, прикрепленных ниже в документе;событие уже передано в документ.

Вы должны использовать новый механизм jQuery «on» (см. здесь ) вместо «live» и вызова event.stopPropagation () должен работать как положено.

0 голосов
/ 14 ноября 2011

События сначала регистрируются до достижения целевого элемента, а затем всплывают.Во время потока событий на событие можно ответить в любом элементе пути (наблюдателе) в любой фазе, вызвав действие и / или остановив событие (с помощью метода event.stopPropagation () для W3C-совместимых браузеров икоманда event.cancelBubble = true для Internet Explorer) и / или путем отмены действия по умолчанию для события.

Исходный вики

Также,

jQuery говорит

event.stopPropagation()

Описание: предотвращает всплывающее событие в дереве DOM, предотвращая уведомление любых родительских обработчиков особытие.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...