Каков эффект добавления "return false" в прослушиватель событий нажатия?

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

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

Каков эффект return false там?

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

Это указано где угодно? В некоторой спецификации в w3.org?

Ответ 1

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

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

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

Ответ 2

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

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

Нажатие кнопки "Okay" возвращает значение true, после чего происходит ссылка. Нажатие "Отмена" возвращает false и не следует по ссылке. Если javascript отключен, ссылка выполняется нормально.

Ответ 3

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

// 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 the parent element of this link)
    var tabstripElement = this.parentNode;
    Tabstrip.showTabByLink(tabstripElement, this);
    return eventCancel(evt);
}

Ответ 4

ЧТО "return false" ДЕЙСТВИТЕЛЬНО ДЕЛАЕТ?

return false на самом деле делает три очень разных вещи, когда вы его вызываете:

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

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

Например:

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 11

return false предотвращает навигацию страницы и нежелательную прокрутку окна сверху или снизу.

onclick="return false"

Ответ 12

Возврат false предотвратит навигацию. В противном случае местоположение станет возвращаемым значением someFunc

Ответ 13

Я удивлен, что никто не упомянул onmousedown вместо onclick.

onclick='return false'

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

onmousedown='return false'

делает.

Другими словами, когда я нажимаю на кнопку, ее текст иногда случайно выбирается, изменяя внешний вид кнопки, что может быть нежелательным. Это поведение по умолчанию, которое мы пытаемся предотвратить здесь. Однако событие mousedown зарегистрировано до click, поэтому, если вы предотвращаете это поведение внутри вашего обработчика click, это не повлияет на нежелательный выбор, возникающий из события mousedown. Таким образом, текст по-прежнему выбирается. Однако предотвращение по умолчанию для события mousedown будет выполнять задание.

См. также event.preventDefault() vs. return false