event.preventDefault () против возврата false - PullRequest
2838 голосов
/ 31 августа 2009

Когда я хочу предотвратить выполнение других обработчиков событий после того, как определенное событие запущено, я могу использовать один из двух методов. Я буду использовать 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? Какой способ лучше?

Ответы [ 13 ]

1 голос
/ 29 сентября 2014

Мое мнение из моего опыта говорит, что всегда лучше использовать

event.preventDefault() 

Практически чтобы остановить или предотвратить отправку события, когда нам потребуется, а не return false event.preventDefault() отлично работает.

0 голосов
/ 14 мая 2019

Из моего опыта event.stopPropagation () в основном используется в CSS-эффектах или анимационных работах, например, когда у вас есть эффект наведения как для карты, так и для элемента кнопки, когда вы наводите курсор на кнопку, сработает эффект наведения карты и кнопок. в этом случае вы можете использовать event.stopPropagation (), чтобы прекратить всплывающие действия, а event.preventDefault () предназначен для предотвращения поведения по умолчанию действий браузера. Например, у вас есть форма, но вы только определили событие щелчка для действия отправки, если пользователь отправляет форму нажатием клавиши ввода, браузер запускается по событию нажатия клавиши, а не событие нажатия здесь, вы должны использовать event.preventDefault (), чтобы избежать неуместного поведение. Я не знаю, что, черт возьми, вернуть ложь; Извините. Для получения дополнительной информации перейдите по этой ссылке и поиграйте со строкой # 33 https://www.codecademy.com/courses/introduction-to-javascript/lessons/requests-i/exercises/xhr-get-request-iv

0 голосов
/ 18 июля 2018

По сути, таким образом вы комбинируете вещи, потому что jQuery - это фреймворк, который в основном фокусируется на HTML-элементах, вы в основном предотвращаете использование по умолчанию, но в то же время останавливаете распространение, чтобы всплыть.

Таким образом, мы можем просто сказать, что false в jQuery равно:

вернуть false - это e.preventDefault AND e.stopPropagation

Но также не забывайте, что все это в функциях, связанных с jQuery или DOM, когда вы запускаете его на элементе, в основном, это предотвращает запуск всего, включая поведение по умолчанию и распространение события.

Прежде чем начать использовать return false;, сначала поймите, что делают e.preventDefault(); и e.stopPropagation();, затем, если вы считаете, что вам нужно и то, и другое одновременно, просто используйте его.

Так что в основном этот код ниже:

$('div').click(function () {
  return false;
});

равно равно этому коду:

$('div').click(function (event) {
  event.preventDefault();
  event.stopPropagation();
});
...