質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

解決済

クリックイベントを入れ子にした場合の処理のされた方

test_get393399
test_get393399

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

2回答

0評価

1クリップ

18閲覧

投稿2018/03/27 05:24

前提・実現したいこと

モーダルウインドウを自サイトに実装したくて、下記ページを参考にしました。

[ プログラミング ] jQueryでスクロールバーの出るモーダルウィンドウを作る方法
http://coolwebwindow.com/jquery-lab/archives/352

html

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>[DEMO]jQueryでスクロールバーの出るモーダルウィンドウを作る方法</title> <script src="js/jquery.js"></script> <script> $(function(){ // スクロールバーの横幅を取得 $('html').append('<div class="scrollbar" style="overflow:scroll;"></div>'); var scrollsize = window.innerWidth - $('.scrollbar').prop('clientWidth'); $('.scrollbar').hide(); // 「.modal-open」をクリック $('.modal-open').click(function(){      alert('モーダルウインドウを開く'); // html、bodyを固定(overflow:hiddenにする) $('html, body').addClass('lock'); // オーバーレイ用の要素を追加 $('body').append('<div class="modal-overlay"></div>'); // オーバーレイをフェードイン $('.modal-overlay').fadeIn('slow'); // モーダルコンテンツのIDを取得 var modal = '#' + $(this).attr('data-target'); // モーダルコンテンツを囲む要素を追加 $(modal).wrap("<div class='modal-wrap'></div>"); // モーダルコンテンツを囲む要素を表示 $('.modal-wrap').show(); // モーダルコンテンツの表示位置を設定 modalResize(); // モーダルコンテンツフェードイン $(modal).fadeIn('slow'); // モーダルコンテンツをクリックした時はフェードアウトしない $(modal).click(function(e){ e.stopPropagation(); }); // 「.modal-overlay」あるいは「.modal-close」をクリック $('.modal-wrap, .modal-close').off().click(function(){ // モーダルコンテンツとオーバーレイをフェードアウト $(modal).fadeOut('slow'); $('.modal-overlay').fadeOut('slow',function(){ // html、bodyの固定解除 $('html, body').removeClass('lock'); // オーバーレイを削除 $('.modal-overlay').remove(); // モーダルコンテンツを囲む要素を削除 $(modal).unwrap("<div class='modal-wrap'></div>"); }); }); // リサイズしたら表示位置を再取得 $(window).on('resize', function(){ modalResize(); }); // モーダルコンテンツの表示位置を設定する関数 function modalResize(){ // ウィンドウの横幅、高さを取得 var w = $(window).width(); var h = $(window).height(); // モーダルコンテンツの横幅、高さを取得 var mw = $(modal).outerWidth(true); var mh = $(modal).outerHeight(true); // モーダルコンテンツの表示位置を設定 if ((mh > h) && (mw > w)) { $(modal).css({'left': 0 + 'px','top': 0 + 'px'}); } else if ((mh > h) && (mw < w)) { var x = (w - scrollsize - mw) / 2; $(modal).css({'left': x + 'px','top': 0 + 'px'}); } else if ((mh < h) && (mw > w)) { var y = (h - scrollsize - mh) / 2; $(modal).css({'left': 0 + 'px','top': y + 'px'}); } else { var x = (w - mw) / 2; var y = (h - mh) / 2; $(modal).css({'left': x + 'px','top': y + 'px'}); } } }); }); </script> <style> body { margin:10px; padding:10px; border:10px solid #ddd; } .lock { overflow:hidden; } .modal-content { position:relative; display:none; width:50%; margin:30px; padding:10px 20px; border:2px solid #aaa; background:#fff; } .modal-content p { margin:0; padding:0; } .modal-overlay { z-index:1; display:none; position:fixed; top:0; left:0; width:100%; height:120%; background-color:rgba(0,0,0,0.75); } .modal-wrap { z-index:2; display:none; position:fixed; top:0; left:0; width:100%; height:100%; overflow:auto; } .modal-open { color:#00f; text-decoration:underline; } .modal-open:hover { cursor:pointer; color:#f00; } .modal-close { color:#00f; text-decoration:underline; } .modal-close:hover { cursor:pointer; color:#f00; } </style> </head> <body> <a data-target="con1" class="modal-open">リンク1</a> <a data-target="con2" class="modal-open">リンク2</a> <a data-target="con3" class="modal-open">リンク3</a> <a data-target="con4" class="modal-open">リンク4</a> <a data-target="con5" class="modal-open">リンク5</a> <div id="con1" class="modal-content"> <p><a href="./">リンク1の内容です。</a>・・・</p> <p><a class="modal-close">閉じる</a></p> </div> <div id="con2" class="modal-content"> <p><a href="./">リンク2の内容です。</a>・・・</p> <p><a class="modal-close">閉じる</a></p> </div> <div id="con3" class="modal-content"> <p><a href="./">リンク3の内容です。</a>・・・</p> <p><a class="modal-close">閉じる</a></p> </div> <div id="con4" class="modal-content"> <p><a href="./">リンク4の内容です。</a>・・・</p> <p><a class="modal-close">閉じる</a></p> </div> <div id="con5" class="modal-content"> <p><a href="./">リンク5の内容です。</a>・・・</p> <p><a class="modal-close">閉じる</a></p> </div> <p> クリックしてみてください。ウィンドウより大きいモーダルウィンドウにはスクロールバーが出ていると思います。<br> </p> <p><a href="http://coolwebwindow.com/jquery-lab/archives/352">&lt;&lt; 記事に戻る</a></p> </body> </html>

コードをほぼコピペしてモーダルウインドウを実装できたのですが、分からないことがあります。

15行目でモーダルウインドウを表示するためのクリックイベントを定義してます。

javascript

$('.modal-open').click(function(){

その後、この定義したクリックイベントを閉じる前に、モーダルウインドウを閉じるクリックイベントを定義しています。

javascript

//46行目 $('.modal-wrap, .modal-close').off().click(function(){

なぜこれで動くのでしょうか?

私の認識ではこんな感じで開く処理を閉じる処理は別々に記述すると思っていました。

javascript

$('.modal-open').click(function(){ //モーダルウインドウを開く処理 }); $('.modal-wrap, .modal-close').off().click(function(){ //モーダルウインドウを閉じる処理 });

今回参考にしたコードはこうなってますよね?

javascript

$('.modal-open').click(function(){ //モーダルウインドウを開く処理 //開く処理の途中で閉じる処理 $('.modal-wrap, .modal-close').off().click(function(){ //モーダルウインドウを閉じる処理 }); });

私のjqueryに対する認識が間違っているということのなのでしょうが、どう理解すればいいのでしょうか。
クリックイベントを入れ子にした場合、どのように処理されますか。

よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。