В чем разница между event.stopPropagation и event.preventDefault?
Кажется, что они делают одно и то же...
Одна из них современная, а другая старая? Или они поддерживаются разными браузерами?
Когда я обрабатываю события самостоятельно (без фреймворков), я всегда проверяю оба варианта и выполняю оба, если они присутствуют. (Я также использую return false, но у меня есть ощущение, что это не работает с событиями, подключенными с помощью node.addEventListener).
Так зачем оба варианта? Мне продолжать проверять оба? Или между ними действительно есть разница?
(Знаю, много вопросов, но они все как бы связаны между собой =))
2 ответ(ов)
event.preventDefault(); предотвращает выполнение стандартного действия элемента.
event.stopPropagation(); предотвращает всплытие события по дереву DOM, что означает, что родительские обработчики событий не будут уведомлены о данном событии.
Например, если у вас есть ссылка с обработчиком клика внутри DIV или FORM, в которых также есть свой обработчик клика, то использование event.stopPropagation(); предотвратит вызов обработчика клика у DIV или FORM.
Давайте сравним preventDefault и stopPropagation.
Все эти методы могут использоваться в обработчиках событий.
event.preventDefault()предотвращает стандартное поведение браузера для данного элемента. Например, для элементаformэто предотвращает отправку формы, а для элементаhref– переход по ссылке.
event.stopPropagation()останавливает событие от всплытия или распространения по дереву DOM.
Что касается
return false, то это комбинация какpreventDefault(), так иstopPropagation().
Таким образом, если вы хотите остановить стандартное поведение элемента и предотвратить всплытие события, вы можете просто вернуть false в обработчике события.
jQuery событие Keypress: Как узнать, какая клавиша была нажата?
Как запустить событие в JavaScript?
Событие клика не работает на динамически созданных элементах
Установить значение по умолчанию в выпадающем списке с помощью jQuery
React: Событие onMouseLeave не срабатывает при быстром движении курсора