Когда и зачем возвращать false в JavaScript?

Ответы:

88

Часто в обработчиках событий, таких как onsubmit, возвращение false - это способ сказать, что событие на самом деле не сработало. Так, скажем, в onsubmitслучае, это будет означать, что форма не представлена.

Крис Шут-Янг
источник
10
Это особенно хорошо, если вам нужна форма AJAX, которая отправляется без перезагрузки страницы, но также работает путем отправки и перезагрузки страницы, когда javascript недоступен.
Дин скорее
10
Возвращение false на самом деле излишне для предотвращения действия по умолчанию при создании обработчиков событий и может привести к хрупкому коду. Объяснение и примеры на пост Дугласа Нейнера здесь fuelyourcoding.com/jquery-events-stop-misusing-return-false
Маркиз Ван
3
С jQuery лучше использовать event.preventDefault()эту функциональность. Я верю, что возвращение ложного значения устарело и больше не всегда работает.
onetwopunch
1
Иногда return falseв методе, это что-то меняет?
Франциско Корралес Моралес
@onetwopunch Фактически, когда я изменил его на e.preventDefault (), я решил проблему с одной из моих функций, основанную на событии касания пространства имен. Не знаю почему, но ты дал мне идею. Спасибо.
Гаравани
69

Я предполагаю, что вы имеете в виду тот факт, что вам часто приходится ставить «возврат ложный»; оператор в ваших обработчиках событий, т.е.

<a href="#" onclick="doSomeFunction(); return false;">...

«Возвращение ложного»; в этом случае браузер не может перейти к текущему местоположению, как указано в href = "#" - вместо этого выполняется только doSomeFunction (). Это полезно, когда вы хотите добавить события в теги привязки, но не хотите, чтобы браузер перепрыгивал вверх и вниз на каждую привязку при каждом клике.

матовый
источник
3
Конечно, 'href = "#" "- это плохая практика, но ваша общая точка зрения остается неизменной :-)
Бобби Джек,
4
@ vol7ron: альтернатива - это реальный URL, который действует как альтернатива для тех, у кого нет JavaScript. В противном случае они просто нажмут на ссылку, и ничего не произойдет.
Бобби Джек
3
@ vol7ron: конечно, каждый разработчик (или владелец сайта) должен точно определить, какую часть потенциальной пользовательской базы они хотят обслуживать. Однако в таком случае, когда вариант, нацеленный на большее количество людей, НАСТОЛЬКО прост, я не понимаю, почему вы не выбрали бы его. Кроме того, имейте в виду, что речь идет не только о людях, явно отключивших JavaScript; это может быть: кто-то другой навязывает им это решение, проблема с сетью при загрузке файла JS, ошибка в одной строке JS, приводящая к сбою. Также неплохо, если щелчок правой кнопкой мыши -> открыть в новой вкладке все еще работает.
Бобби Джек,
Это не менее 1% пользователей. Многие люди по разным причинам используют такие расширения, как NoScript. Чтобы отключить такие вещи, как JavaScript, целенаправленно.
2012 года
@ vol7ron Другой сценарий, который следует учитывать, - это когда «javascript ломается» (из-за синтаксической ошибки выше на странице). Наличие не-js запасных вариантов дает вам несколько сетей безопасности для этого сценария. (Google.com не работал почти 30 минут назад из-за синтаксической ошибки js!)
Alex Czarto
28

Он используется для остановки распространения события . Вы видите, когда у вас есть два элемента, оба с обработчиком события щелчка (например)

-----------------------------------
| element1                        |
|   -------------------------     |
|   |element2               |     |
|   -------------------------     |
|                                 |
-----------------------------------

Если вы щелкнете по внутреннему элементу (element2), он вызовет событие щелчка в обоих элементах: 1 и 2. Он называется «Пузыри событий». Если вы хотите обработать событие только в element2, то обработчик события должен вернуть false, чтобы остановить распространение события.

Другим примером будет обработчик ссылки onclick. Если вы хотите, чтобы ссылка перестала работать. Вы можете добавить обработчик onclick и вернуть false. Чтобы остановить распространение события на обработчик по умолчанию.

Надя Алрамли
источник
9
первая часть этого ответа неверна: возврат falseиз обработчика события предотвратит действие по умолчанию, связанное с событием; Вы также можете сделать это с помощью вызова event.preventDefault()или настройки event.returnValue = false(IE); чтобы остановить событие от всплытия, вам нужно позвонить event.stopPropagation()или настроить event.cancelBubble = true(IE)
Кристоф
18

Э-э ... как насчет в булевой функции, чтобы указать «не правда»?

Бобби Джек
источник
4
как насчет FileNotFound?
Nickf
Даже в FileNotFound false все еще не верно, не так ли?
Глеб
2
Глеб: «В FileNotFound» нет, это шутка TDWTF
Крис
12

Я также пришел на эту страницу после поиска "js, когда использовать" return false; " Среди других результатов поиска была страница, которую я нашел гораздо более полезной и понятной, на сайте CSS-Tricks Криса Койера: «Разница между возвращаемым значением false»; и 'e.preventDefault ();'

Суть его статьи:

function () {return false; }

// РАВНО

function (e) {e.preventDefault (); e.stopPropagation (); }

хотя я бы по-прежнему рекомендовал прочитать всю статью.

Обновление: после обсуждения преимуществ использования return false; в качестве замены для e.preventDefault (); & e.stopPropagation (); один из моих коллег отметил, что return false также останавливает выполнение обратного вызова, как описано в этой статье: jQuery Events: Stop (Mis) Using Return False .

flyingace
источник
Я должен заметить, что после некоторого тестирования кода: в jquery , function() { return false; }EQUAL TO function(e) { e.preventDefault(); e.stopPropagation(); }, но в чистом js, это не то же самое, function() { return false; }EQUAL TO на function(e) { e.preventDefault(); }самом деле. Это не останавливает распространение.
SkuraZZ
6

При использовании eachфункции jQuery возвращение true или false имеет значение. См док

geowa4
источник
3

Я думаю, что лучший вопрос заключается в том, почему в случае, когда вы оцениваете логический набор возвращаемых значений, вы НЕ используете истину / ложь ? Я имею в виду, вы могли бы иметь истину / нуль, истину / -1, другое разное. Javascript «ложные» значения для замены, но зачем вам это делать?

Фрэнк Росарио
источник
1

Если вы хотите запустить код javascript из тега привязки, следует использовать обработчик onclick, а не псевдопротокол javascript :. Код javascript, который выполняется внутри обработчика onclick, должен возвращать true или false (или выражение, отличное от true или false) обратно к самому тегу - если он возвращает true, то HREF привязки будет следовать как обычная ссылка. Если он возвращает false, то HREF будет игнорироваться. Вот почему "вернуть ложь"; часто включается в конец кода в обработчик onclick.

Jamna
источник
1

Вы используете return false, чтобы предотвратить что-то. Так что если у вас есть скрипт, работающий на submit, то возвращение false будет препятствовать работе submit.

rhysclay
источник
1

Когда в функции вызывается оператор возврата, выполнение этой функции останавливается. Если указано, данное значение возвращается вызывающей функции. Если выражение опущено, вместо него возвращается undefined.

Для получения дополнительной информации посетите страницу документации MDNreturn .

habibun
источник
1

вернуть false, используя только если у вас есть какой-то рабочий в функции (с помощью некоторого теста) или вы хотите остановить какую-то функцию, например, используйте return false в конце «onsubmit»

Абдул Азиз Аль Басыр
источник
1

Кроме того, эта короткая и интересная ссылка для чтения через https://www.w3schools.com/jsref/event_preventdefault.asp

Определение и использование

Метод warnDefault () отменяет событие, если его можно отменить, а это означает, что действие по умолчанию, относящееся к событию, не произойдет.

Например, это может быть полезно, когда:

Clicking on a "Submit" button, prevent it from submitting a form
Clicking on a link, prevent the link from following the URL

Примечание. Не все события можно отменить. Используйте свойство cancellable, чтобы узнать, можно ли отменить событие.

Примечание. Метод protectDefault () не предотвращает дальнейшее распространение события через DOM. Используйте метод stopPropagation () для обработки этого.

jet2016
источник
Попробуйте использовать: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault в отличие от w3schools. Но твердый ответ.
Bibberty