【JavaScript】DIVの外側をクリックしたときにDIVを非表示にする方法
DIVの外側をクリックしたときにDIVを非表示にする方法
Webアプリケーションを開発していると、モーダルウィンドウやドロップダウンメニューなど、「ユーザーが要素の外側をクリックしたら閉じる」という動作を実装したい場面がよくあります。JavaScriptを使えば、この機能はとてもシンプルに実現できます。
基本的な仕組み
ポイントは、document全体にクリックイベントを設定し、クリックされた要素(e.target)のIDが対象のDIVと一致しない場合に、そのDIVを非表示にすることです。
以下のコードを実行して、実際の動作を確認してみてください。
サンプルコード
<!DOCTYPE html>
<html>
<body>
<script>
window.onload = function(){
var hideMe = document.getElementById('hideMe');
document.onclick = function(e){
if(e.target.id !== 'hideMe'){
hideMe.style.display = 'none';
}
};
};
</script>
<div id="hideMe">このDIVの外側をクリックすると非表示になります。</div>
</body>
</html>
コードの解説
- window.onload:ページの読み込みが完了してから処理を実行します。これにより、DOM要素を確実に取得できるようになります。
- document.onclick:ドキュメント全体のクリックイベントを監視し、ページ内のどこがクリックされても検知できるようにします。
- e.target.id !== 'hideMe':クリックされた要素のIDが「hideMe」以外の場合、つまりDIVの外側がクリックされた場合に条件が成立します。
- style.display = 'none':該当するDIVの表示をオフにして、画面から非表示にします。
実装時の注意点
このシンプルな実装では、DIV内の子要素をクリックした場合にも「外側のクリック」と判定されてしまう点に注意が必要です。DIVの中にボタンやテキストなどの子要素があり、それらのクリックは許可したい場合は、closest()メソッドを使って次のように判定すると安全です。
document.addEventListener('click', function(e){
if (!e.target.closest('#hideMe')) {
document.getElementById('hideMe').style.display = 'none';
}
});
closest()は、クリックされた要素自身またはその祖先に指定のセレクターが存在するかどうかを判定できるため、子要素のクリックまでは正しく区別できます。モーダルやポップアップなど、実用的なUIを作る際にはこちらの方法をおすすめします。
-
【初心者向け】<script>タグでクライアント側のJavaScriptを定義する方法
HTMLの<script>タグは、HTMLドキュメント内にスクリプトを宣言するために使用されます。このタグを使うことで、クライアント側(ブラウザ側)で動作するJavaScriptを定義できます。 <script>タグと</script>タグの間に記述したコードは、ブラウザによって解釈・実行されます。また、src属性を使えば、外部のJavaScriptファイルを読み込むことも可能です。 <script>タグの主な属性 属性値説明 asyncasyncスクリプトが非同期で実行されることを指定します。ページの読み込みをブロックせずにスクリプトを
-
ボタンクリック時にJavaScriptでdivを非表示にする方法をわかりやすく解説
Webページを作成していると、ボタンをクリックしたタイミングで特定の要素を表示・非表示に切り替えたい場面はよくあります。この記事では、JavaScriptのstyle.displayを使って、ボタンクリック時にdiv要素を非表示にする方法を具体的なコード例とともに解説します。基本となるdiv要素の準備まず、操作対象となる以下のようなdiv要素を用意します。<div id=showOrHide> Welcome in JavaScript </div>次に、クリックすると上記のdivが非表示になるボタンを配置します。onclick属性に関数名を指定するのがポイントです。&