Вернуться к уроку

Почему не работает return false?

важность: 3

Почему в этом документе return false не работает?

<script>
  function handler() {
    alert( "..." );
    return false;
  }
</script>

<a href="http://w3.org" onclick="handler()">w3.org</a>

По замыслу, переход на w3.org при клике должен отменяться. Однако, на самом деле он происходит.

В чём дело и как поправить?

Дело в том, что обработчик из атрибута onclick делается браузером как функция с заданным телом.

То есть, в данном случае он будет таким:

function(event) {
  handler() // тело взято из атрибута onclick
}

При этом возвращаемое handler значение никак не используется и не влияет на результат.

Рабочий вариант:

<script>
  function handler() {
    alert("...");
    return false;
  }
</script>

<a href="http://w3.org" onclick="return handler()">w3.org</a>

Также можно использовать объект события для вызова event.preventDefault(), например:

<script>
  function handler(event) {
    alert("...");
    event.preventDefault();
  }
</script>

<a href="http://w3.org" onclick="handler(event)">w3.org</a>