Каков эффект добавления 'return false' в прослушиватель событий щелчка? - PullRequest
340 голосов
/ 24 сентября 2008

Много раз я видел такие ссылки на страницах HTML:

<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>

Каково влияние return false там?

Кроме того, я обычно не вижу этого в кнопках.

Это указано где-нибудь? В некоторых спецификациях в w3.org?

Ответы [ 13 ]

299 голосов
/ 24 сентября 2008

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

Я не верю, что для этого есть спецификация W3C. Все древние интерфейсы JavaScript, подобные этому, получили прозвище «DOM 0» и в основном не определены. Возможно, вам повезет, прочитав старую документацию по Netscape 2.

Современный способ достижения этого эффекта - вызвать event.preventDefault(), и это указано в спецификации событий DOM 2 .

160 голосов
/ 25 сентября 2008

Вы можете увидеть разницу в следующем примере:

<a href="http://www.google.co.uk/" onclick="return (confirm('Follow this link?'))">Google</a>

Нажатие «ОК» возвращает true, и ссылка идет. Нажатие «Отмена» возвращает false и не переходит по ссылке. Если JavaScript отключен, ссылка выполняется в обычном режиме.

26 голосов
/ 24 сентября 2008

Вот более надежная процедура для отмены поведения по умолчанию и всплытия событий во всех браузерах:

// Prevents event bubble up or any usage after this is called.
eventCancel = function (e)
{
    if (!e)
        if (window.event) e = window.event;
    else return;
    if (e.cancelBubble != null) e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
    if (e.preventDefault) e.preventDefault();
    if (window.event) e.returnValue = false;
    if (e.cancel != null) e.cancel = true;
}

Пример того, как это будет использоваться в обработчике событий:

// Handles the click event for each tab
Tabstrip.tabstripLinkElement_click = function (evt, context) 
{
    // Find the tabStrip element (we know it's the parent element of this link)
    var tabstripElement = this.parentNode;
    Tabstrip.showTabByLink(tabstripElement, this);
    return eventCancel(evt);
}
20 голосов
/ 19 августа 2014

ЧТО "вернуть ложь" ДЕЙСТВИТЕЛЬНО ДЕЛАЕТ?

return false фактически делает три совершенно разные вещи, когда вы называете это:

  1. event.preventDefault ();
  2. event.stopPropagation ();
  3. Останавливает выполнение обратного вызова и немедленно возвращается при вызове.

Подробнее см. jquery-events-stop-misusing-return-false .

Например:

при переходе по этой ссылке возврат false будет отменять поведение браузера по умолчанию .

<a href='#' onclick='someFunc(3.1415926); return false;'>Click here !</a>
15 голосов
/ 24 сентября 2008

Возврат false из события JavaScript обычно отменяет поведение «по умолчанию» - в случае ссылок он говорит браузеру не переходить по ссылке.

12 голосов
/ 24 сентября 2008

Возвращение false остановит гиперссылку после запуска javascript. Это полезно для ненавязчивого javascript, который изящно ухудшается - например, у вас может быть уменьшенное изображение, которое использует javascript для открытия всплывающего окна полноразмерного изображения. Когда javascript выключен или изображение щелкнуто по среднему значению (открывается на новой вкладке), это игнорирует событие onClick и просто открывает изображение как полноразмерное изображение.

Если return false не было указано, изображение будет запускать всплывающее окно и открывать его как обычно. Некоторые люди вместо использования false возвращают использование javascript в качестве атрибута href, но это означает, что когда javascript отключен, ссылка ничего не сделает.

12 голосов
/ 24 сентября 2008

Я считаю, что стандартное событие не происходит.

В вашем примере браузер не будет пытаться перейти на #.

7 голосов
/ 24 сентября 2008

использование return false в событии onclick останавливает браузер от обработки остальной части стека выполнения, включая переход по ссылке в атрибуте href.

Другими словами, добавление return false останавливает работу href. В вашем примере это именно то, что вы хотите.

В кнопках это не нужно, потому что onclick - это все, что он когда-либо будет выполнять - здесь нет href для обработки и перехода.

5 голосов
/ 24 сентября 2008

В возвращаемом значении false указано, что действие по умолчанию не выполняется, а в случае <a href> - перейти по ссылке. Когда вы вернете false в onclick, то href будет игнорироваться.

4 голосов
/ 24 сентября 2008
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...