リンクをクリックさせる前にJavaScript:confirmで確認する時の注意
presented by 役に立つかもしれないBlog
JavaScriptによるダイアログでユーザーの同意を得てリンク先に移動させるようなページを作成する場合にうっかり見落としがちなポイントを挙げておきたいと思います。
やりたいこと
- 「child.html」から「adult.html」にリンクで移動させたい。
- 18歳以上であるかどうかをJavaScriptのダイアログで確認する。
- 18歳以上に同意してもらえれば「adult.html」に移動させる。
危ない例
まず、危ない例を書きます。 どこがおかしいか分かりますか?
<noscript>JavaScriptをオンにしてください。 正常に動作しない場合があります。</noscript>
<a href="adult.html" onclick="return confirm('あなたは18歳以上ですか?');">18歳以上の方はこちら</a>
JavaScriptがOffにしてあったらどうなるの?
この例ではJavaScriptがOffにしてある場合が想定されていません。
JavaScriptをオフにすると「onclick=...」の部分が動きませんので、単なるリンクになってしまい、リンク先に移動してしまいます。 これではまずい。
キーボードでフォーカスしてEnterしたらどうなるの?
残念ながらこの場合も動作してしまいます。 防ぐには「onkeypress」属性にも同じ処理を指定するか、onkeypress属性ではfalseを返すようにしましょう。
<a href="adult.html" onkeypress="return false;" ... >
この例は、<noscript>タグで警告はしてあるものの、しくみでは動作するようになっているので、クレームが来てしまうと対応に苦労します。 くれぐれもこういう書き方はしないようにしましょうね。
安全な例
次に安全な例を書きます。
<noscript>JavaScriptをオンにしてください。 正常に動作しない場合があります。</noscript>
<a href="javascript:void(0);" onclick="var ok=confirm('あなたは18歳以上ですか?');
if (ok) location.href='adult.html'; return false;">18歳以上の方はこちら</a>
JavaScriptがオフの場合はリンクそのものが動作しない
こちらの例はリンク先にJavaScriptの「location.href」を利用しているので、JavaScriptがオフの場合は動作しません。
また、フォーカスによるEnter操作の場合も「href="javascript:void(0);"」の箇所が動作するだけなので「adult.html」には遷移しません。
ちなみに、最後の「return false;」の部分はInternet Explorer (IE)対策で、最後にfalseを返さないとリンクが動作しない仕様になっているためです。
シンプルな処理でも落とし穴が隠されているので注意
このページに関連のある記事はこちら
- SeleniumでjQueryを利用する
- PowerPointでPDF書き出し時のテキストが消える問題と解決法
- JavaScriptでDATETIME型の日付を得る方法
- JavaScriptで全角数字を半角数字に変換する方法(おまけつき)
- tableにjQueryのtoggleを使うと幅が100%に広がらない件
- JavaScript+Prototype.jsで右クリックメニューが作れる「Proto.Menu」
- jQueryでbit.lyと連携。短縮URLをTwitterに投稿してもらう方法
- JavaScriptで日付から「第○曜日」(何番目の曜日か)を調べる方法
- Suicaオートチャージの罠! ~少額入金の人は注意~
- 上空で眼の奥に激痛が!「飛行機頭痛」対策
- VNCサーバーが落ちても自動で復活させる方法



コメントフォーム