Есть ли разница между вызовом event.stopImmediatePropagation()
и return false
внутри обработчика событий?
Jquery: event.stopImmediatePropagation() vs return false
Ответ 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/...