JavaScript: void(0)の意味とは?代替手段も紹介!
aタグのhref属性に設定されているJavaScript: void(0)の意味について解説します。またリンクを無効化させるvoid(0)の代替手段についてもサンプルコード付きで解説します。
JavaScript: void(0)とは?
void(0)
の表記をどこかで見たことがありますでしょうか?
ブラウザ上でリンクをクリックしたらブラウザ上にエラーが表示され、その中にvoid(0)
があったという場合や、開発者であればHTMLのコードの中にvoid(0)
が設定されていたなど見たことがある方もいるかと思います。
このvoid(0)
ですが、a
タグに対して慣習的に下記のように利用されます。
void(0)を使った慣習的な書き方
<a href="javascript:void(0)" onclick="JavaScriptでクリック時の処理">リンク</a>
a
タグのhref
属性にjavascript:void(0)
とする書き方は通常href
属性には遷移先のURLなどを指定しますが、上記のようにjavascript: スキーム名とすることで続くJavaScriptのコードを実行させることが出来ます。
ではvoid(0)
は何を表すかという点ですが、void
演算子についてまずは紹介します。
void演算子
void
演算子は続く括弧の中の式を評価し、undefined
を返す演算子です。void(0)
でもvoid(123)
でもundefined
を返します。
(慣習的に0がよく使われます)
一見すると意味のないような演算子に見えますが、式の評価はするため「JavaScriptを実行したいが、特に値は返したくない」という場合に有用です。
例えば下記のような書き方も可能になります。
void演算子の使い方例
<a href="void(document.getElementById('sample').style.backgroundColor='#fff')">リンク</a>
またvoid
演算子は必ずundefined
を返しますが、undefined
と文字をタイプするよりもvoid(0)
の方がタイプ数が短いということもあり、慣習的に使われている面もあります。
まとめ
ここまでをまとめるとhref
属性のvoid(0)
はundefined
を返します。
つまりhref
属性にundefined
が指定されることになりますが、これはhref属性がjavascript: スキームに対応していて、JavaScriptが有効になっているブラウザでは「何も遷移させない」という結果になります。つまりリンクの遷移の無効化です。
そして本命のJavaScriptの動作をa
タグのonclick
属性で指定して行うような使い方をしているケースが多いです。
void(0)の代替手段
さて、これまで紹介してきましたhref
属性にvoid(0)
を指定するやり方ですが、あまりおすすめではありません。というのも特定の条件で遷移エラーが発生する場合があるからです。
例えばブラウザのバージョンが古かったりJavaScriptが無効になっている場合はブラウザの遷移エラーが発生します。
ではhref
属性のvoid(0)
の代わりにどのような方法をとればいいのでしょうか?
リンクである必要が無い場合
これはまではa
タグのhref
属性を利用していましたが、必ずしもa
タグである必要がないのであれば別のタグを利用しましょう。
他のを使ってJavaScriptを実行
<button type="button" onclick="本命のJavaScript">ボタン</button>
<span onclick="本命のJavaScript">span</span>
a
タグでは無い、別のタグに置き換えればページ遷移することはないので、リンクの無効化自体が必要ではありません。
どうしてもaタグの必要がある場合
ページ内リンクにする
href
属性の遷移先を"#"にすると、ページ内遷移で先頭に遷移しますが、エラーの発生は無くなります。
遷移先を"#"にする
<a href="#" onclick="本命のJavaScript">リンク</a>
CSSでリンクを無効にする
CSSでリンクを無効化することが出来ます。pointer-events
プロパティをnone
に設定してみましょう。下記のサンプルコードをご覧下さい。
上記のサンプルコードではa
タグのhref
属性にリンク先が設定されていますが、クリックしても遷移しないと思います。
まとめ
このようにvoid(0)
以外でもリンクを無効化できる方法は存在します。
慣習的にvoid(0)
を使ってもいいですが、全てのブラウザでサポートされた方法では無いことと、それを知った上でいくつかのやり方を組み合わせてリンクを無効化した方が確実ですので、ぜひ今回の内容を参考に組み合わせてリンクの無効化をしてみて下さい。