レッスンに戻る

なぜ "return false" が動作しないのでしょう?

重要性: 3

なぜ下のコードで return false がまったく動かないのでしょうか?

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

<a href="http://w3.org" onclick="handler()">the browser will go to w3.org</a>

ブラウザはクリックでそのURLを辿りますが、それをしたくありません。

どのように修正しますか?

ブラウザが onclick のような on* 属性を読み込むとき、そのコンテンツからハンドラを生成します。

onclick="handler()" の場合、関数はこうなります:

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>