Когда я хочу запретить выполнение других обработчиков событий после определенного события, я могу использовать один из двух методов. Я буду использовать jQuery в примерах, но это относится и к plain-JS:
1. event.preventDefault()
$('a').click(function (e) {
// custom handling here
e.preventDefault();
});
2. return false
$('a').click(function () {
// custom handling here
return false;
});
Есть ли существенная разница между этими двумя методами остановки распространения событий?
Для меня return false;
это проще, короче и, вероятно, менее подвержен ошибкам, чем выполнение метода. При использовании этого метода вы должны помнить о правильном регистре, скобках и т. Д.
Кроме того, я должен определить первый параметр в обратном вызове, чтобы иметь возможность вызывать метод. Возможно, есть некоторые причины, почему я должен избегать делать это так и использовать preventDefault
вместо этого? Какой способ лучше?
preventDefault
это не мешает другим левшей от исполнения. Вот для чегоstopImmediatePropagation
.Ответы:
return false
из обработчика событий JQuery фактически то же самое , как вызов , какe.preventDefault
иe.stopPropagation
на пройденный объект jQuery.Event.e.preventDefault()
предотвратит возникновение события по умолчанию,e.stopPropagation()
предотвратит всплытие события иreturn false
выполнит оба действия. Обратите внимание , что это поведение отличается от нормальных (не JQuery) обработчиков событий, в которых, в частности,return false
никак не остановить событие от бурлит.Источник: Джон Резиг
Есть ли какая-либо польза от использования event.preventDefault () по сравнению с «return false» для отмены клика href?
источник
return false
из обработчика DOM2 (addEventListener
) вообще ничего не делает (ни предотвращает дефолт, ни останавливает пузырьки; из обработчика Microsoft DOM2-ish (attachEvent
) он предотвращает дефолт, но не пузырьки; из обработчика DOM0 (onclick="return ..."
) он предотвращает дефолт (при условии вы включаетеreturn
в атрибут), но не всплывает, из обработчика событий jQuery это делает и то, и другое, потому что это вещь jQuery. Подробности и живые тесты здесьreturn false
это не остановить распространение события в обработчиках событий , не JQuery. т.е.<a href="#" onclick="return false">Test</a>
никак не остановить событие от бурлит.По моему опыту, при использовании event.preventDefault () есть, по крайней мере, одно явное преимущество по сравнению с return false. Предположим, вы фиксируете событие click для тега привязки, в противном случае было бы большой проблемой, если бы пользователь ушел с текущей страницы. Если ваш обработчик кликов использует return false, чтобы предотвратить навигацию в браузере, он открывает возможность того, что интерпретатор не достигнет оператора return, и браузер продолжит выполнять поведение по умолчанию для тега привязки.
Преимущество использования event.preventDefault () состоит в том, что вы можете добавить это в качестве первой строки в обработчике, тем самым гарантируя, что поведение якоря по умолчанию не сработает, независимо от того, не достигнута ли последняя строка функции (например, ошибка времени выполнения) ).
источник
Как вы уже назвали, это не вопрос «JavaScript»; это вопрос относительно дизайна jQuery.
JQuery и ранее связаны цитата из Джона Resig (в karim79 в сообщении ) , как представляется, является источником непонимания того , как обработчики событий в общей работе.
Факт: обработчик события, который возвращает false, предотвращает действие по умолчанию для этого события. Это не останавливает распространение события. Обработчики событий всегда работали таким образом, начиная с давних времен Netscape Navigator.
Документация от MDN объясняет , как
return false
в обработчик событий работаетТо, что происходит в jQuery, отличается от того, что происходит с обработчиками событий. Слушатели событий DOM и «прикрепленные» события MSIE - это совсем другое дело.
Для получения дополнительной информации см. AttachEvent на MSDN и документацию W3C DOM 2 Events .
источник
return false
же, какevent.preventDefault()
. Но я не знаю; достаточно заставить меня взять это с щепоткой соли.jQuery
это просто подмножество JavaScript, а не его собственный язык.Как правило, вы выбираете первый вариант (
preventDefault()
), но вы должны знать, в каком контексте вы находитесь, и каковы ваши цели.Fuel Your Coding имеет отличную статью о
return false;
противevent.preventDefault()
иevent.stopPropagation()
противevent.stopImmediatePropagation()
.источник
При использовании jQuery
return false
выполняет 3 отдельных действия, когда вы его называете:event.preventDefault();
event.stopPropagation();
Посмотрите События jQuery: Stop (Mis) Использование Return False для получения дополнительной информации и примеров.
источник
Вы можете повесить много функций на
onClick
событие для одного элемента. Как вы можете быть уверены, чтоfalse
тот будет последним, кто стреляет?preventDefault
с другой стороны, определенно предотвратит только поведение элемента по умолчанию.источник
Я думаю
event.preventDefault()
это w3c указанный способ отмены событий.
Вы можете прочитать это в спецификации W3C по отмене событий .
Также вы не можете использовать return false в любой ситуации. При предоставлении функции javascript в атрибуте href и если вы возвращаете false, пользователь будет перенаправлен на страницу с записанной ложной строкой.
источник
<a href="javascript:return false"
чем-то?Я думаю, что лучший способ сделать это - использовать,
event.preventDefault()
потому что если в обработчике возникает какое-то исключение,false
оператор return будет пропущен, а поведение будет противоположным тому, что вы хотите.Но если вы уверены, что код не будет вызывать каких-либо исключений, вы можете использовать любой метод, который пожелаете.
Если вы все еще хотите использовать возврат
false
, вы можете поместить весь код обработчика в блок try catch, как показано ниже:источник
Мое мнение из моего опыта говорит, что это всегда лучше использовать
Практически, чтобы остановить или предотвратить отправку события, когда нам требуется, а не
return false
event.preventDefault()
работает нормально.источник
preventDefault
это некоторые английские слова, я понимаю, что это "предотвращает дефолт".return false
это некоторые английские слова, я понимаю, что это «возвращает ложь», но я понятия не имею, почему, пока я не Google Google этот загадочный код. И бонусом я могу управлять отдельноstopPropagation
иpreventDefault
.Основное различие между
return false
иevent.preventDefault()
заключается в том, что ваш код нижеreturn false
не будет выполнен и вevent.preventDefault()
случае, если ваш код будет выполняться после этого оператора.Когда вы пишете return false, он делает за вас следующие вещи.
источник
e.preventDefault ();
Он просто останавливает действие элемента по умолчанию.
запрещает гиперссылку следовать по URL, запрещает кнопку отправки для отправки формы. Когда у вас есть много обработчиков событий, и вы просто хотите предотвратить возникновение события по умолчанию и повторение много раз, для этого нам нужно использовать в верхней части функции ().
Причина использования
e.preventDefault();
заключается в том, что в нашем коде что-то идет не так в коде, тогда это позволит выполнить ссылку или форму для отправки или позволить выполнить или разрешить любое действие, которое вам нужно сделать. & ссылка или кнопка отправки будут отправлены и все еще позволяют дальнейшее распространение события.вернуть Ложь;
Это просто останавливает выполнение функции ().
«
return false;
» завершит все выполнение процесса.Причина использования return false; в том, что вы больше не хотите выполнять функцию в строгом режиме.
источник
По сути, таким способом вы комбинируете вещи, потому что jQuery - это фреймворк, который в основном фокусируется на HTML-элементах, вы в основном предотвращаете использование по умолчанию, но в то же время вы останавливаете распространение, чтобы всплыть.
Таким образом, мы можем просто сказать, что возвращаемое значение false
jQuery
равно:вернуть false - это e.preventDefault AND e.stopPropagation
Но также не забывайте, что все это в функциях, связанных с jQuery или DOM, когда вы запускаете его на элементе, в основном, это предотвращает запуск всего, включая поведение по умолчанию и распространение события.
В основном, прежде чем начать использовать
return false;
, сначала поймите, чтоe.preventDefault();
иe.stopPropagation();
делаете, затем, если вы считаете, что вам нужно и то, и другое одновременно, просто используйте это.Итак, в основном этот код ниже:
является равным этому коду:
источник
Из моего опыта event.stopPropagation () в основном используется в CSS-эффектах или анимационных работах, например, когда у вас есть эффект наведения как для карты, так и для элемента кнопки, когда вы наводите курсор на кнопку, в этом случае сработает эффект наведения карты и кнопок. , вы можете использовать event.stopPropagation (), чтобы прекратить всплывать действия, а event.preventDefault () предназначен для предотвращения поведения по умолчанию действий браузера. Например, у вас есть форма, но вы только определили событие щелчка для действия отправки, если пользователь отправляет форму нажатием клавиши ввода, браузер запускается по событию нажатия клавиши, а не событие щелчка здесь, вы должны использовать event.preventDefault (), чтобы избежать неуместного поведение. Я не знаю, что, черт возьми, вернуть ложь; извините. Для более подробной информации перейдите по этой ссылке и поиграйте с линией № 33https://www.codecademy.com/courses/introduction-to-javascript/lessons/requests-i/exercises/xhr-get-request-iv
источник