stopPropagation
останавливает событие от всплытия цепочки событий.
preventDefault
предотвращает действие по умолчанию, которое браузер выполняет с этим событием.
Примеры
preventDefault
$("#but").click(function (event) {
event.preventDefault()
})
$("#foo").click(function () {
alert("parent click event fired!")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
stopPropagation
$("#but").click(function (event) {
event.stopPropagation()
})
$("#foo").click(function () {
alert("parent click event fired!")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
При stopPropagation
этом вызывается только button
обработчик div
щелчка, а обработчик щелчка никогда не срабатывает.
Где, как будто вы используете preventDefault
, останавливается только действие браузера по умолчанию, но обработчик щелчков div все еще срабатывает.
Ниже приведены некоторые документы по свойствам и методам событий DOM из MDN:
Для IE9 и FF вы можете просто использовать protectDefault & stopPropagation.
Для поддержки IE8 и ниже заменить stopPropagation
на cancelBubble
и заменить preventDefault
наreturnValue
event.stop
функции ... Также странно, у меня никогда не было проблем с этим. Я часто использую пузырьки. Спасибо за пример!cancelBubble
иreturnValue
оба свойства (так должны быть установленыcancelBubble = true;
), и чтоpreventDefault
иstopPropagation
методы (так следует называтьpreventDefault();
)stopDefault()
он не работает так же, какstopPropagation()
. Если действие по умолчанию не вызываетonclick
метод, что это?терминология
С quirksmode.org :
Интерфейс
С w3.org , для захвата событий :
Для всплытия событий :
Для отмены мероприятия :
Примеры
В следующих примерах щелчок по гиперссылке в веб-браузере запускает поток события (слушатели события выполняются) и действие по умолчанию для цели события (открывается новая вкладка).
HTML:
JavaScript:
Пример 1 : это приводит к выводу
Пример 2 : добавление
stopPropagation()
в функциюрезультаты в выводе
Слушатель события предотвратил дальнейшее распространение события вниз и вверх. Однако это не помешало действию по умолчанию (открытие новой вкладки).
Пример 3 : добавление
stopPropagation()
в функциюили функция
результаты в выводе
Это связано с тем, что оба прослушивателя событий зарегистрированы на одной и той же цели. Слушатели события предотвратили дальнейшее распространение события вверх. Однако они не помешали действию по умолчанию (открытие новой вкладки).
Пример 4 : добавление
preventDefault()
к любой функции, напримерпредотвращает открытие новой вкладки.
источник
вернуть ложь;
return false;
делает 3 отдельные вещи, когда вы называете это:event.preventDefault()
- Останавливает поведение браузера по умолчанию.event.stopPropagation()
- Он предотвращает распространение события (или «всплеск») DOM.Обратите внимание, что это поведение отличается от обычных (не jQuery) обработчиков событий, в которых, в частности,
return false
не останавливается всплывание события.preventDefault ();
preventDefault();
делает одно: останавливает поведение браузера по умолчанию.Когда их использовать?
Мы знаем, что они делают, но когда их использовать? Просто это зависит от того, чего вы хотите достичь. Используйте,
preventDefault();
если вы хотите «просто» предотвратить поведение браузера по умолчанию. Используйте return false; когда вы хотите предотвратить поведение браузера по умолчанию и предотвратить распространение DOM события. В большинстве ситуаций, где вы бы использовали return false; что вы действительно хотитеpreventDefault()
.Примеры:
Давайте попробуем разобраться с примерами:
Мы увидим чистый пример JAVASCRIPT
Пример 1:
Пример 2:
Пример 3:
Пример 4:
Пример 5:
случаи:
Увидим все три примера.
Надеюсь, эти примеры понятны. Попробуйте выполнить все эти примеры в html-файле, чтобы увидеть, как они работают.
источник
Это цитата отсюда
event.preventDefault
Метод protectDefault предотвращает выполнение событием своих функций по умолчанию. Например, вы использовали бы protectDefault для элемента A, чтобы перестать щелкать по этому элементу, чтобы он покинул текущую страницу:
В то время как функциональные возможности элемента по умолчанию заложены, событие продолжает всплывать в DOM.
event.stopPropagation
Второй метод, stopPropagation, позволяет использовать функциональность события по умолчанию, но предотвращает распространение события:
stopPropagation эффективно не дает родительским элементам знать о данном событии своего дочернего элемента.
источник
Event.preventDefault - останавливает поведение браузера по умолчанию. Теперь перейдем к поведению браузера по умолчанию. Предположим, у вас есть тег привязки, у него есть атрибут href, и этот тег привязки вложен в тег div, который получил событие click. Поведение по умолчанию тега привязки происходит при нажатии на тег привязки, по которому он должен перемещаться, но в случае event.preventDefault он останавливает навигацию. Но это никогда не останавливает пузыри события или эскалации события, т.е.
Результат будет
"элемент был нажат"
"контейнер был нажат"
Теперь event.StopPropation останавливает всплывание события или эскалацию события. Теперь с приведенным выше примером
Результат будет
"элемент был нажат"
Для получения дополнительной информации обратитесь по этой ссылке https://codeplanet.io/preventdefault-vs-stoppropagation-vs-stopimmediatepropagation/
источник
event.preventDefault();
Останавливает действие элемента по умолчанию.event.stopPropagation();
Предотвращает всплытие события в DOM-дереве, предотвращая уведомление любых родительских обработчиков о событии.Например, если есть ссылка с методом щелчка, прикрепленным внутри
DIV
или кFORM
которой также прикреплен метод щелчка, это предотвратит запуск методаDIV
илиFORM
щелчка.источник
источник