Коли і навіщо "повертати помилку" в JavaScript?


Відповіді:


88

Часто для обробників подій, наприклад onsubmit, повернення помилок - це спосіб сказати, що подія насправді не спрацьовує. Так, скажімо, у onsubmitвипадку це означало б, що форма не подається.


10
Це особливо добре, якщо ви хочете форму AJAX, яка надсилається без перезавантаження сторінки, але також працює, надсилаючи та перезавантажуючи сторінку, коли javascript недоступний.
Дін, швидше,

10
Помилкове повернення насправді є надмірним для запобігання дії за замовчуванням при створенні обробників подій і може призвести до крихкого коду. Пояснення та приклади у публікації Дугласа Нейнера тут fuelyourcoding.com/jquery-events-stop-misusing-return-false
Маркіз Ван

3
За допомогою jQuery його краще використовувати event.preventDefault()для цієї функціональності. Я вважаю, що повернення помилки застаріле і не завжди працює більше.
onetwopunch

1
Іноді return falseв методі є, чи це щось змінює?
Франциско Корралес Моралес

@onetwopunch Насправді, коли я змінив його на e.preventDefault (), вирішив проблему з однією з моїх функцій на основі події сенсорного простору імен. Не знаю чому, але ви мені дали ідею. Дякую.
Гаравані

69

Я здогадуюсь, що ви маєте на увазі той факт, що вам часто доводиться ставити "false false"; заява у ваших обробниках подій, тобто

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

Повернення помилкове; у цьому випадку браузер зупиняє перехід до поточного місця, як зазначено href = "#" - натомість виконується лише doSomeFunction (). Це корисно для тих випадків, коли ви хочете додати події до прив’язних тегів, але не потрібно, щоб браузер підскакував угору та вниз на кожен якір кожного натискання


3
Звичайно, 'href = "#"' є поганою практикою, але загальна точка все ще стоїть :-)
Боббі Джек

4
@ vol7ron: альтернатива - це реальна URL-адреса, яка виступає альтернативою людям без JavaScript. Інакше вони просто натискатимуть на посилання, і нічого не відбувається.
Боббі Джек

3
@ vol7ron: звичайно, кожен розробник (або власник сайту) повинен точно визначити, яку частину потенційної бази користувачів вони хочуть задовольнити. Однак у такому випадку, коли варіант, на який націлено більше людей, настільки простий, я не бачу, чому б ви не вибрали це. Також майте на увазі, що справа не лише в тому, що люди явно відключають JavaScript; це може бути: хтось інший, який нав'язує їм таке рішення, мережева проблема з завантаженням файлу JS, помилка в одному рядку JS, що призводить до того, що все вийде з ладу. Крім того, це дуже добре, якщо правою кнопкою миші>> відкрити в новій вкладці все ще працює.
Боббі Джек

Це не менше 1% користувачів. Багато людей використовують такі розширення, як NoScript, не просто так. Щоб цілеспрямовано вимкнути такі речі, як JavaScript.
Сеперо

@ vol7ron Інший сценарій, який слід враховувати - це коли "ламається JavaScript" (через синтаксичну помилку вище на сторінці). Наявність резервних копій, що не є js, дає вам кілька мереж безпеки для цього сценарію. (Google.com майже 30 хвилин назад
відхилявся

28

Він використовується для зупинки поширення події . Ви бачите, коли у вас є два елементи як із обробником подій клацання (наприклад)

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

Якщо натиснути на внутрішній елемент (element2), він спричинить подію клацання в обох елементах: 1 і 2. Це називається "Подія в бульбашці". Якщо ви хочете обробляти подію лише в element2, тоді обробник подій повинен повернути помилку, щоб зупинити поширення події.

Іншим прикладом буде посилання на обробник onclick. Якщо ви хочете припинити роботу форми посилання. Ви можете додати обробник onclick і повернути помилкове. Щоб запобігти поширенню події на обробник за замовчуванням.


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: Різниця між "return false;" та 'e.preventDefault ();'

Суть його статті полягає в:

function () {return false; }

// РІВНЕ ДО

функція (e) {e.preventDefault (); e.stopPropagation (); }

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

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


Я мушу зауважити тут , після деякого тестування коду , який: в JQuery , function() { return false; }так само function(e) { e.preventDefault(); e.stopPropagation(); }, але в чистому JS, це не те ж саме, function() { return false; }так само на function(e) { e.preventDefault(); }самому справі. Це не припиняє розмноження.
SkuraZZ

6

При використанні eachфункції jQuery повернення істинного чи помилкового має значення. Дивіться док


3

Я думаю, що краще питання: чому у випадку, коли ви оцінюєте булевий набір повернутих значень, ви НЕ використовуєте true / false ? Я маю на увазі, ви, ймовірно, могли мати true / null, true / -1, інший різне. "Falsy" значення Javascript замінити, але навіщо це робити?


1

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


1

Ви використовуєте false false, щоб не допустити чогось. Отже, якщо у вас запущений сценарій при надсиланні, тоді return false буде запобігти роботі надсилати.


1

Коли виклик повернення викликається у функції, виконання цієї функції зупиняється. Якщо вказано, задане значення повертається до виклику функції. Якщо вираз опущено, замість нього повертається невизначений.

Детальніше дивіться на сторінці документів MDN дляreturn .


1

повернути помилкове, використовуючи лише те, що у вас є якийсь черв'як у функції (деяким тестом) або ви хочете зупинити якусь функцію, наприклад, використовуйте return false в кінці "onsubmit"


1

Також це коротке та цікаве посилання для читання на https://www.w3schools.com/jsref/event_preventdefault.asp

Визначення та використання

Метод prevenDefault () скасовує подію, якщо її можна скасувати, це означає, що дія за замовчуванням, яка належить до події, не буде відбуватися.

Наприклад, це може бути корисно, коли:

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

Примітка: Не всі події можна скасувати. Скористайтеся властивістю "Скасувати", щоб дізнатися, чи можна подію скасувати.

Примітка. Метод prevenDefault () не перешкоджає подальшому поширенню події через DOM. Для цього вживайте метод stopPropagation ().


Подумайте про використання: developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault на відміну від w3schools. Але тверда відповідь.
Bibberty
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.