Подтвердить что ты не робот

Jquery: event.stopImmediatePropagation() vs return false

Есть ли разница между вызовом event.stopImmediatePropagation() и return false внутри обработчика событий?

4b9b3361

Ответ 1

Да, они разные.

return false в основном совпадает с вызовом обоих event.stopPropagation() и event.preventDefault().

В то время как event.stopImmediatePropagation() совпадает с event.stopPropagation() плюс предотвращает другие зарегистрированные обработчики событий на одном элементе для выполнения. Таким образом, это не препятствует действию по умолчанию для события, например, по ссылке с кликом.

Короче:

                            stop   |    prevent     | prevent "same element"
                          bubbling | default action | event handlers

return false                 Yes           Yes             No
preventDefault               No            Yes             No
stopPropagation              Yes           No              No
stopImmediatePropagation     Yes           No              Yes

return false также работает в "нормальных" обработчиках событий JavaScript

event.stopPropagation() и event.preventDefault() также работают в "нормальных" обработчиках событий JavaScript (в браузере, совместимом с W3C), тогда как event.stopImmediatePropagation() является расширением от jQuery (update:, по-видимому, это часть Спецификация событий DOM уровня 3).

Примечание. return false не предотвращает буферизацию события в "нормальных" (не-jQuery) обработчиках событий (см. этот ответ) (но все же препятствует действию по умолчанию).


Возможно, стоит прочитать:

Ответ 2

Возврат false остановит событие пузырька, но другие связанные события будут срабатывать. Однако stopImmediatePropagation предотвращает запуск других связанных событий и прекращает барботирование.

Пример кода на jsfiddle.

Ответ 3

Вот полная демонстрация для return false, preventDefault, stopPropagation и stopImmediatePropagation:

var kid = document.getElementsByTagName('button')[0];
var dad = document.getElementsByTagName('div')[0];

kid.addEventListener('click', function(e) {
    console.log('kid here');
    e.stopImmediatePropagation();
});

kid.addEventListener('click', function(e) {
    console.log('neighbour kid here');
});

dad.addEventListener('click', function(e) {
   console.log('dad here');
});

dad.addEventListener('click', function(e) {
   console.log('neighbour dad here');
});
<div>
    <button>press</button>
</div>

Ответ 4

Да. event.stopImmediatePropagation() не позволит вызывать любые другие обработчики для этого события, независимо от того, где они связаны. Возврат false останавливает обработчики, привязанные к другим элементам (т.е. Не тот же элемент, что и обработчик события, связанный с вызовом stopImmediatePropagation()) от получения события.

Ответ 5

@Таблица ответов FelixKling с большой концепцией:

Я отправляю дополнительную объясненную таблицу:

                            stop   |    prevent     |       prevent          |
                          bubbling | default action |    event handlers      |
                                                     Same Element  |  Parent Element

return false                 Yes           Yes             No           No
preventDefault               No            Yes             No           No
stopPropagation              Yes           No              No           Yes
stopImmediatePropagation     Yes           No              Yes          No

Ссылка: fooobar.com/info/1819/...