jquery: event.stopImmediatePropagation () против возврата false - PullRequest
56 голосов
/ 14 марта 2011

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

Ответы [ 5 ]

147 голосов
/ 14 марта 2011

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

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 Level 3 Events ).

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


Может бытьСтоит прочитать:

4 голосов
/ 14 марта 2011

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

Код Пример этого на jsfiddle .

1 голос
/ 01 июля 2015

Вот полное демо для 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>

(также доступно для JSFiddle .)

Таблица в ответе Манвала не полностью верна.

                            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          **Yes**
0 голосов
/ 07 января 2015

@ Таблица ответов 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

Ссылка: https://stackoverflow.com/a/5302939/2236219

0 голосов
/ 14 марта 2011

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

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