こんにちは、プログラミング初心者でWebアプリを作っており、
現在、JavaScriptの簡単なところで詰まってしまいました。
あるWebアプリをコピーして練習をしているのですが、
元々のhtmlのソースに処理をしていくので、
だいぶわかりにくくなってしまっています。
そこで、今回はポップアップを表示させて、
「キャンセル」ボタンを押すと
そのポップアップが閉じる処理をJavaScriptにさせたいです。
現状は、ポップアップは表示できたのですが、
閉じる処理がどうもできません。
何卒ご教授願います。
こちらが、関係があると思われるソースコードです。
lang
1<!-- ポップアップする為のリンク --> 2<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="document.getElementById('choice_84462_popup').style.display='block';">ペアを組む</a> 3 4 <!-- ポップアップ箇所 ここから --> 5<div class="area-popup pair-choice" id="choice_84462_popup" style="display: none"> 6 <div class="btnClose-choice"></div> 7 <form> 8 <input type="hidden" name="token1time" value="${ person.fbid }" /> 9 <div class="box-pair boxChoice"> 10 <div class="photo-choice"><img src="https://graph.facebook.com/${ person.photo }/picture?width=120&height=120" width="120" height="120" alt=""></div> 11 <p class="txt-choice"><em>${ person.name }</em>さんとペアを組みます。<br>よろしいですか?</p> 12 <div class="btnChoice"> 13 <p class="btnAgree-choice dblClickDisabled"> 14 <a href="#" onclick="document.hidForm_84462.submit()"> 15 決定 16 </a></p> 17 <p class="btn_disable"> 18 <a href="#" onclick="return false;">決定</a></p> 19 <p class="btnCancel-choice"><a href="#" onClick="window.close(); return false;">キャンセル</a></p> 20 <p class="btn_disable"><a href="#">キャンセル</a></p> 21 </div> 22 </div> 23 </form> 24 25</div> 26<!-- ポップアップ箇所 ここまで --> 27 28<script type="text/javascript"> 29$(function () { 30 $('#choice_84462_popup').magnificPopup({ 31 type: 'inline', 32 preloader: false 33 }); 34 $(document).on('click', '.btnCancel-choice', function (e) { 35 e.preventDefault(); 36 $.magnificPopup.close(); 37 }); 38}); 39</script>
だいぶ画面とにらめっこをしていたのですが、
わかりません。
よろしく御願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答16件
0
なんだか意見や知識が溢れかえっているようなので条件を満たす最小限の方法を私は提示してみます。
まずこのポップアップはHTMLのdivタグなどを表示して擬似的に再現された物です。
"ポップアップ箇所ここから"とコメントされている箇所を見てください。
lang
1<div class="area-popup pair-choice" id="choice_84462_popup" style="display: none"> 2<!--省略--> 3</div>
style="display : none;"という記述がありますね。これは設定された要素を非表示にします。
次にクリックされた時の処理を見てください。
CSSのStyle、displayをblockにするというコードがポップアップを表示するコードとなります。
であれば非表示にする(ポップアップを閉じる)方法は単純です。
閉じるためのボタンとなる物を設置し、そこにクリックイベントで動作するメソッドを設定します。
lang
1//処理内容 2document.getElementId("choice_84462_popup"").style.display="none"
これで閉じる(非表示にする)ことができます。
……がjQueryプラグインを使用しているのですよね?
であれば閉じるメソッドも当然そこにある物と思うのですが。
投稿2015/05/29 01:12
総合スコア730
0
ブラウザによっても挙動が違うようです。
このサイトでまとめてくれてますが、window.close()で閉じるのはIEだけみたいです。
投稿2015/06/01 00:28
総合スコア1844
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ここのコードが理解できていなかったのですよね?jQueryだったからですか?
だから、逃げの一手で、DOMにネイティブでイベント処理を書いたのですよね?見ればわかります。
確かにこれは簡単じゃないかもですね。少し解説しましょう。
lang
1$(function () { 2 // id属性にchoice_84462が指定してある要素に対して、clickイベントが発生した際、 3 // 匿名関数を用意しておいて、これを実行させています。 4 // 匿名関数?ググってください。と言いたいところですが・・・ 5 // 確かにこれは難しいです。分らないのも仕方ありません。 6 // http://www.ajaxtower.jp/js/function/index5.html ここ見てください。 7 // つまりこれがイベントハンドラの処理です。 8 // jQueryのonメソッドでググってください。つまりこれが動的にイベントハンドラを 9 // くっつける(アタッチしている)ことになります。 10 // 'click'は何のイベントに対してイベントハンドラを定義するかを指定しています。 11 // '#choice_84462'はセレクタ(要素を特定するための手掛かり)です。 12 // 勘違いしてはいけません。#choice_84462という名前ではありません。 13 // 頭に#が付いていると、idがchoice_84462という要素を探せという意味になります。 14 $(document).on('click', '#choice_84462', function (e) { 15 // idがchoice_84462_popupという要素に対して、magnificPopupメソッドを実行していますが 16 // jQueryに、そんなメソッドはありません。 17 // それと、よく見てください。 18 // choice_84462 ではありませんよ? choice_84462_popupです。混同しないでください。 19 // これを見つけたからmagnificPopupという 20 // ライブラリを使っていると読み解けたんです 21 // jQuery magnificPopupでググってください。 22 // 本家のURLならライブラリをロードしてる場所に書いておきましたが 23 // 使い方は他のサイトがいいでしょう。自分で探してください。 24 $('#choice_84462_popup').magnificPopup({ 25 type: 'inline', 26 preloader: false 27 }); 28 }); // ここまでがidがchoice_84462な要素のイベントハンドラ 29 // もう一つ別の要素に対して、イベントハンドラをアタッチしています。 30 // ただし、今度はセレクタが'.btnCancel-choice'です。 31 // セレクタの先頭に . (ドット)を書いた場合はクラス名で探せという意味になります。 32 // クラス名にbtnCancel-choiceが指定されている要素に対してのイベントハンドラです。 33 $(document).on('click', '.btnCancel-choice', function (e) { 34 e.preventDefault(); // ここを見ましょう。 35 // http://www.tam-tam.co.jp/tipsnote/javascript/post5050.html 36 // ちょっとググっただけで、すぐに見つかりましたよ? 37 // コードの理解を早々に投げ出して調べてもいないのが丸わかりです 38 // とはいえ、これは見つけたからと言ってすぐには理解できないかもですね。 39 // イベントと言うのはですね。特定の要素で発生した後に 40 // 同じイベントが、それを包括する要素へと伝播します 41 // 要素の上位へ上位へと上がっていくことから、泡が浮き上がっていくようなので 42 // bubble(泡)で、バブリングといいます。 43 // 特定の要素でイベントが発生したとして、そこにイベントハンドラがないなら 44 // 処理しようがありませんから、そこでは何もしません。 45 // 定義してあれば、もちろん起動します。その上でさらに 46 // 親の要素へイベントが浮き上がり、どんどん上がって行きながら 47 // 途中で見つけたイベントハンドラをかたっぱしから起動するのです 48 // もちろん、上がって行っているイベントが見つけたイベントハンドラが 49 // 処理対象としているイベントであった場合ですよ? 50 $.magnificPopup.close(); // magnificPopupのcloseを調べてください。 51 }); 52});
さぁ、手掛かりは書いておきましたよ?調べ方の道筋を示しました。
今度は何処から手を付けていいか分らない等と言うことは無いはずです。
これで分らないと言い出すのは、調べてないということになりますよ?
いやまぁ、見つけても理解に難しい内容のものがある場合も確かにありますが・・・
そのときは・・・ いますよね? 馬鹿だけど、おせっかいな奴が・・・
ネイティブでイベントハンドラをアタッチする方法は、
javascript イベントハンドラ 追加
でググってください。いやってほど出てきますよ?
お疲れさまでした。これで終わりです。
よく投げださずに付き合ってくださいました。
説明が下手な言葉を重ねねば満足に説明も出来ない無能な人間に付き合っていただき
本当に、本当にありがとうございました。m(_ _)m
ここまで投げ出さずに努力してくださったことに対し、最大限の敬意を表します。
最後に、今一度書きます。
勉強する気さえあれば、こんな、私のような未熟者のコードなんか、すぐに分るはずですよ?
こちらにいらっしゃる、有能な先輩方なら、私のこのコードみて下手糞と笑っているはずですよ?
本当に勉強する気持ちがあるなら、分らなかったら悔しくて眠れないはずです。
そして、どうやっても分らなかったら、恥を忍んででも、ここへ教えてくれと来るはずです。
これだけダラダラと説明することを決心した時から最後まで付き合うと腹を決めていました。
ご自身が書かれているように、プログラミング初心者ということは承りました。
だからこそ、手取り足とり解説しました。
どうか投げ出さないでください。
待ってますよ?
投稿2015/05/27 22:51
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ところで、何故、jQueryを使うのか? 今まで、あえて触れてきませんでしたが、JavaScriptというのは
ブラウザごとに微妙に実装が違ったりしています。同じブラウザですら、バージョンが違うと動作が違ったりします。そういうブラウザの違いをjQueryは吸収してくれるのです。
これを使えば、クロスブラウザ開発が格段に楽になるんです。
あとは、CSSの違いくらいが、クロスブラウザ対策で残っているくらいです。
そして、jQueryには、ネイティブなJavaScriptにはない色々な便利機能があります。だから皆、jQueryを使うんです。
勉強する気さえあれば、こんな、私のような未熟者のコードなんか、すぐに分るはずですよ?
こちらにいらっしゃる、有能な先輩方なら、私のこのコードみて下手糞と笑っているはずですよ?
もちろん分っています。勉強したくても、どこから手を付けていいのかが分らないのですよね?
それは私が何とかしましょう。そのために言葉を重ねて説明しています。
本当に勉強する気持ちがあるなら、分らなかったら悔しくて眠れないはずです。
そして、どうやっても分らなかったら、恥を忍んででも、ここへ教えてくれと来るはずです。
色々生意気言ってすみません。最後に、まだ、解決してない問題がありますよね?
アプローチは2つあります、
1.全てイベントハンドラはDOMに(タグの属性として)定義する
2.scriptタグで囲まれているスクリプトで動的に要素に対してイベントハンドラを接続する(アタッチする)
この2を説明してません。これを述べなきゃ片手落ちというものです。
では、以下にスクリプトで動的に要素に対してイベントハンドラを接続する(アタッチする) 方法を
jQueryを使って提示します。
これによって、初めて、そちら様がご用意なされたライブラリが使えます。
その結果、ポップアップするDIVがリッチなものになるんです。
確認できなかったので、例としてあげますが
(このライブラリに、そんな機能があるとは言ってません誤解しないでください)
たとえばポップアップする時にMACみたいに、小さなウィンドウが
回転しながら大きくなっていって、最後にボーン見たいに出せるかも
ライブラリがそう作ってあれば、出来るかもしれないのです。
何の労力も使わずに、ただライブラリを利用するだけでです。
これが狙いでライブラリを使っているんですよ?
lang
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html> 3 4<head> 5 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 6 <link rel="stylesheet" href="./magnific-popup.css"> 7</head> 8 9<body> 10 11<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 12<!-- https://github.com/dimsemenov/Magnific-Popup/ --> 13<!-- for debug 14<script src="./jquery.magnific-popup.js"></script> 15--> 16<script src="./jquery.magnific-popup.min.js"></script> 17 18<!-- ポップアップする為のリンク --> 19<!-- 20<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="document.getElementById('choice_84462_popup').style.display='block';">ペアを組む</a> 21--> 22<a href="#choice_84462_popup" class="btn-pair" id="choice_84462">ペアを組む</a> 23 24 <!-- ポップアップ箇所 ここから --> 25<div class="area-popup pair-choice" id="choice_84462_popup" style="display: none"> 26 <div class="btnClose-choice"></div> 27 <form> 28 <input type="hidden" name="token1time" value="${ person.fbid }" /> 29 <div class="box-pair boxChoice"> 30 <div class="photo-choice"><img src="https://graph.facebook.com/${ person.photo }/picture?width=120&height=120" width="120" height="120" alt=""></div> 31 <p class="txt-choice"><em>${ person.name }</em>さんとペアを組みます。<br>よろしいですか?</p> 32 <div class="btnChoice"> 33 <p class="btnAgree-choice dblClickDisabled"> 34 <a href="#" onclick="document.hidForm_84462.submit()"> 35 決定 36 </a></p> 37 <p class="btn_disable"> 38 <a href="#" onclick="return false;">決定</a></p> 39 <!-- 40 <p class="btnCancel-choice"><a href="#" onClick="window.close(); return false;">キャンセル</a></p> 41 --> 42 <p class="btnCancel-choice"><a href="#">キャンセル</a></p> 43 <p class="btn_disable"><a href="#">キャンセル</a></p> 44 </div> 45 </div> 46 </form> 47 48</div> 49<!-- ポップアップ箇所 ここまで --> 50 51<script type="text/javascript"> 52<!-- 53$(function () { 54 $(document).on('click', '#choice_84462', function (e) { 55 $('#choice_84462_popup').magnificPopup({ 56 type: 'inline', 57 preloader: false 58 }); 59 }); 60 $(document).on('click', '.btnCancel-choice', function (e) { 61 e.preventDefault(); 62 $.magnificPopup.close(); 63 }); 64}); 65// --> 66</script> 67 68</body> 69 70</html> 71
ちゃんと元あったコードを活用し動くように修正してあります。そのはずです。
ただ、申し訳ありません。ちゃんと動作確認をした上で提示したかったのですが
必要なファイルが、いくつかご提示いただけていないため、
今提示したコードだけは、動作確認が出来ませんでした。
ここまで来て、それは無いだろう?はい、すみません。私の力不足です。
投稿2015/05/27 22:43
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
能書きはいいから、さっさと教えろ?いいでしょう。もう、提示しても理解できますよね?
説明なんかしませんよ?分らないなら前に戻って確認してきてください。
DOMに直書き、jQueryの場合のみ書きます。DOMに直書きでネイティブコードの場合は、もうどうすればいいか、ここまでのことが、ちゃんと理解できていれば分るはずです。
lang
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html> 3 4<head> 5 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 6 <link rel="stylesheet" href="./magnific-popup.css"> 7</head> 8 9<body> 10 11<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 12<!-- https://github.com/dimsemenov/Magnific-Popup/ --> 13<!-- for debug 14<script src="./jquery.magnific-popup.js"></script> 15--> 16<script src="./jquery.magnific-popup.min.js"></script> 17 18<!-- ポップアップする為のリンク --> 19<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="$('#choice_84462_popup').css('display', 'block');">ペアを組む</a> 20 21 <!-- ポップアップ箇所 ここから --> 22<div class="area-popup pair-choice" id="choice_84462_popup" style="display: none"> 23 <div class="btnClose-choice"></div> 24 <form> 25 <input type="hidden" name="token1time" value="${ person.fbid }" /> 26 <div class="box-pair boxChoice"> 27 <div class="photo-choice"><img src="https://graph.facebook.com/${ person.photo }/picture?width=120&height=120" width="120" height="120" alt=""></div> 28 <p class="txt-choice"><em>${ person.name }</em>さんとペアを組みます。<br>よろしいですか?</p> 29 <div class="btnChoice"> 30 <p class="btnAgree-choice dblClickDisabled"> 31 <a href="#" onclick="document.hidForm_84462.submit()"> 32 決定 33 </a></p> 34 <p class="btn_disable"> 35 <a href="#" onclick="return false;">決定</a></p> 36 <p class="btnCancel-choice"><a href="#" onClick="$('#choice_84462_popup').css('display', 'none'); ">キャンセル</a></p> 37 <p class="btn_disable"><a href="#">キャンセル</a></p> 38 </div> 39 </div> 40 </form> 41 42</div> 43<!-- ポップアップ箇所 ここまで --> 44 45<script type="text/javascript"> 46<!-- 47/* 48$(function () { 49 $('#choice_84462_popup').magnificPopup({ 50 type: 'inline', 51 preloader: false 52 }); 53 $(document).on('click', '.btnCancel-choice', function (e) { 54 e.preventDefault(); 55 $.magnificPopup.close(); 56 }); 57}); 58*/ 59// --> 60</script> 61 62</body> 63 64</html> 65
scriptタグ内のコードをDOMから呼び出す場合でjQueryで書くなら、こうなります。ネイティブコードは書きません。分るはずです。分るように説明してきましたよ?
lang
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html> 3 4<head> 5 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 6 <link rel="stylesheet" href="./magnific-popup.css"> 7</head> 8 9<body> 10 11<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 12<!-- https://github.com/dimsemenov/Magnific-Popup/ --> 13<!-- for debug 14<script src="./jquery.magnific-popup.js"></script> 15--> 16<script src="./jquery.magnific-popup.min.js"></script> 17 18<!-- ポップアップする為のリンク --> 19<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="showHideDiv('show','choice_84462_popup')">ペアを組む</a> 20 21<!-- ポップアップ箇所 ここから --> 22<div class="area-popup pair-choice" id="choice_84462_popup" style="display: none"> 23 <div class="btnClose-choice"></div> 24 <form> 25 <input type="hidden" name="token1time" value="${ person.fbid }" /> 26 <div class="box-pair boxChoice"> 27 <div class="photo-choice"><img src="https://graph.facebook.com/${ person.photo }/picture?width=120&height=120" width="120" height="120" alt=""></div> 28 <p class="txt-choice"><em>${ person.name }</em>さんとペアを組みます。<br>よろしいですか?</p> 29 <div class="btnChoice"> 30 <p class="btnAgree-choice dblClickDisabled"> 31 <a href="#" onclick="document.hidForm_84462.submit()"> 32 決定 33 </a></p> 34 <p class="btn_disable"> 35 <a href="#" onclick="return false;">決定</a></p> 36 <p class="btnCancel-choice"><a href="#" onClick="showHideDiv('hide','choice_84462_popup')">キャンセル</a></p> 37 <p class="btn_disable"><a href="#">キャンセル</a></p> 38 </div> 39 </div> 40 </form> 41 42</div> 43<!-- ポップアップ箇所 ここまで --> 44 45<script type="text/javascript"> 46<!-- 47function showHideDiv(mode,id){ 48 var jqDiv = $('#'+id); 49 50 if (!jqDiv[0]) { 51 alert("ランタイムエラー:idの指定が不正です。"); 52 return false; 53 } 54 55 switch (mode){ 56 case 'show': 57 jqDiv.css('display', 'block'); 58 break; 59 case 'hide': 60 jqDiv.css('display', 'none'); 61 break; 62 default: 63 alert("ランタイムエラー:modeの指定が不正です。"); 64 break; 65 } 66} 67 68/* 69$(function () { 70 $('#choice_84462_popup').magnificPopup({ 71 type: 'inline', 72 preloader: false 73 }); 74 $(document).on('click', '.btnCancel-choice', function (e) { 75 e.preventDefault(); 76 $.magnificPopup.close(); 77 }); 78}); 79*/ 80// --> 81</script> 82 83</body> 84 85</html> 86
はい、気づきましたか?気づいてませんか?
何かが違いますよね?
私は意図的にコードを変えてますよ?
意地悪ですか?
そう取られるならそれでもいいですが、この意図は、関数呼び出しの形を取れば
このように凝った事ができるということを提示したかったんです。
何をしているのか理解できませんか?そうかもしれませんね・・・
でも、ご説明しません。
自分で調べてみてください。どうもjQueryだからといって難しいからと投げ出してコードの理解に
挑もうとしてないように見受けられたから、こうしてるのですよ?
ただし、注意点が一点、コードが何をやっているかを理解するだけで終わらないでください。
本当に理解するということは、コードが何故こうなっているのか?いったい、何を意図してこうなっているのか?狙いは何なのか?
プログラマーそのものの、思考の流れ、意図していること。
それを考えてください。意味もなく、こんなコードを書いたわけではないのですよ?
jQueryでググってください。 コードの断片でも検索のキーワードに使ってググってみてください。
グーグル先生は、驚くほど頭がいいですよ?曖昧なコード断片でもそれなりにHITしてくれます。
jQueryユーザーはいっぱいいます。従って、これに関するページなんか掃いて捨てるほどありますよ?
投稿2015/05/27 22:37
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
おかえりなさい。大丈夫ですか?
それでは、閉じる場合についてご説明しますが、実はもう必要な予備知識は与えていますよ?
何のために、これだけ言葉を重ねたと思っていますか?
確かに答え一発、これを提示すれば、ことは終わりです。
しかし、それは相手が十分な予備知識を習得している場合です。
失礼ながら、コードを見ただけで必要な予備知識の習得が出来ていないのが容易に想像できたので
予備知識から、ご説明したんです。
もう今は必要な予備知識は習得できているはずなので、どうすればいいかわかるはずです。
私は何と書きましたか?
現在、そちら様がポップアップウィンドウだと思っている物は
ポップアップウィンドウなどではありません
DIVタグに、style="display: none"とありますね?
つまり、このDIVタグで囲まれている要素は、
存在しているにも関わらず、要素のサイズは0で非表示状態で待機している
何らかのタイミングで、この要素のスタイルが、
style="display: block"と書き換えられた瞬間に
いきなり忽然と魔法のようにあらわれる
こう書いたはずですよ?
そして、displayをblockに書き換える方法を、えんえんと説明してきました。
非表示状態がdisplay: none;で
表示状態にするにはdisplay: block;なら
消すには逆をやればいいと気づきましたか?
ちゃんと、これが偽物のポップアップウィンドウで、本当はただのDIVを隠しておいたものを
望んだタイミングで表示しているにすぎないということが理解できていれば
逆をやればいいと気づくはずです。
しかし、提示されたコードは
window.close()でしたね?
だから、愕然としたのです。理解できていないこと、そして予備知識の習得が出来ていないことを
読み取れたのです。
もちろん、プログラミングの経験がないということは把握しています。
だから、1から説明しています。
投稿2015/05/27 22:32
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
さて、これで、1.全てイベントハンドラはDOMに(タグの属性として)定義する についての
ポップアップウィンドウを開く(ように見えているだけの、実際にはDIVを表示状態にする)
が、出来ましたね?
そして、本題の閉じるための方法ですが、
ちゃんと、ここまでを飛ばしたりせずに読んできましたか?
理解できなかった場合は、前に戻って、ちゃんと確認しましたか?
どうしても理解できないなら提示したコードを実際に動かして、色々いじってみって試しましたか?
答えを書くのは簡単です。あえてそれをせずに独りよがりな演説を調子にのって、ぶちかましている
某巨大掲示板で言う処の、公開オナニーを行うという
恥さらしな行為までした、私の苦労を無駄にしないでください。
試してないなら今からでも動作確認してきてください。
投稿2015/05/27 22:29
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
そして、問題はこれをどう起動するか(kickするといいます)です
いま、1.全てイベントハンドラはDOMに(タグの属性として)定義するの1-1.簡単なスクリプトでとりあえず逃げる。
をやってるので、ポップアップのDIVタグの要素を表示する契機(トリガー)となる要素へ、
このスクリプトを定義してやって、
clickというイベントが発生した(ユーザーがトリガー要素をクリックした)タイミングで
kickするように指定してやればいいわけです。
トリガーとなる要素は、
lang
1<!-- ポップアップする為のリンク --> 2<a href="#choice_84462_popup" class="btn-pair" id="choice_84462">ペアを組む</a>
このリンクで、これをclickしたときにkickされればいいので、この場合onClickという属性にセットします。
例として、jQueryで書いたものを呼び出す場合の書き方を書きます。もう片方は分りますね?
lang
1<!-- ポップアップする為のリンク --> 2<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="$('#choice_84462_popup').css('display', 'block');">ペアを組む</a>
付いてきていますか?途中で投げ出さないでください。今ががんばり時ですよ?
がんばれば出来るんです。やればできます。投げ出しては進歩はありませんよ? Fight!!
こんどは、1.全てイベントハンドラはDOMに(タグの属性として)定義する の1-2.ちゃんとscriptタグ内のコードを呼び出して、このコードを生かす。
これを、やってみましょう。
これを実現するためには、
c.まずは、実現したい処理を一纏まりの塊として定義してやり
d.そして、これを呼び出すコードを書く
cを実現するためには、処理の塊を関数として定義・宣言してやります
今までのことを踏まえて、少しずつ応用していきますよ?しっかりついてきてくださいね?
JavaScriptにおいて処理を一纏まりの定義(関数)として宣言するにはfunctionを使います。
全部ネイティブな(jQueryを使わないで)処理で書くなら、こう書きます。
lang
1function showDiv(){ 2 document.getElementById('choice_84462_popup').style.display='block'; 3}
jQueryで書くならこう書きます。
lang
1function showDiv(){ 2 $('#choice_84462_popup').css('display', 'block'); 3}
今は、関数の定義は非常に簡単なものにしていますが、その気になれば、関数内で
DIVを表示状態にして(スタイルをblockにする)
ユーザ名に合わせて、特定のユーザーであったら、特定の要素の色を変える
条件によっては、画像を表示するimgタグを動的に追加して画像を表示する
などなど、その気になれば、いくらでも作りこむことができます。
やり方は、あえて書きません、勉強する気があれば、それこそteratail内を血眼になって
探し回れば売るほど出てきますよ?努力してください、努力を怠らなければ結果はついてきます。
つぎに、dですが、これは、もう既にやり方を提示してありますよ?それを応用するだけです。
全部ネイティブな(jQueryを使わないで)処理で書くなら、こう書きます。
lang
1<!-- ポップアップする為のリンク --> 2<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="showDiv()">ペアを組む</a> 3 4<script type="text/javascript"> 5<!-- 6function showDiv(){ 7 document.getElementById('choice_84462_popup').style.display='block'; 8} 9// --> 10</script>
jQueryで書くなら、こうなります
lang
1<!-- ポップアップする為のリンク --> 2<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="showDiv()">ペアを組む</a> 3 4<script type="text/javascript"> 5<!-- 6function showDiv(){ 7 $('#choice_84462_popup').css('display', 'block'); 8} 9// --> 10</script>
考え方は同じです。もし迷ったら、前に戻ってください。一つ一つ基本を提示して積み上げてきていますので、迷ったら基本に立ち返ってください。
投稿2015/05/27 22:27
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
さて、前置きがやっとおわりました。すみません。力不足なため、これだけのことに
ずいぶんと時間を使ってしまいました。申し訳ありません。
では、どうすればいいのか
まず、ポリシーがブレています。
おそらくは、よく理解できなかったがため、悪戦苦闘して試行錯誤されたのでしょうね><
苦労なさったんですね。がんばりましたね。
その結果、イベントハンドラを、いったい、DOMで(タグの属性として)定義するつもりなのか
スクリプトで動的に定義するつもりなのかが統一されていません。
そしてscriptタグで囲まれているスクリプトについて理解されていませんね?
このスクリプトが理解できていたら、これを生かすソースになったはずですし、
これを使ないで、DOMに(タグの属性として)イベントハンドラを書くつもりならば
このスクリプトは用なしなので、さくっと消していたはずです。
アプローチは2つあります、
1.全てイベントハンドラはDOMに(タグの属性として)定義する
2.scriptタグで囲まれているスクリプトで動的に要素に対してイベントハンドラを接続する(アタッチする)
まず、1のアプローチからやってみましょう。
1のアプローチでも2つの方法があります。
1-1.簡単なスクリプトでとりあえず逃げる。
1-2.ちゃんとscriptタグ内のコードを呼び出して、このコードを生かす。
1-1ならば
まず、ポップアップとして見かけ上表示され、他の要素の上に重なって表示される、この要素の
lang
1 <!-- ポップアップ箇所 ここから --> 2<div class="area-popup pair-choice" id="choice_84462_popup" style="display: none">
現状style="display: none"となっている物をstyle="display: block;"と書き換えてやることです。
そのためには
a.要素を特定する
b.要素の属性のstyleの、さらにdisplayをblockへ書き換える
aをjQueryを使わずに書くならば
lang
1document.getElementById('choice_84462_popup')
こうですね?
jQueryで書くなら
lang
1$('#choice_84462_popup')
こうなりますね?分らなければ 「jQuery セレクタ」で検索してください。
調べれば分かることを放棄して楽なほうへ行こうとしているのが見えていますよ?
投げ出さないでください。ちゃんと説明しますから。
bをjQueryを使わずに書くならば
lang
1ある特定の要素のオブジェクト.style.display='block'
こう書きます。
jQueryで書くなら
lang
1ある特定の要素のjQueryオブジェクト.css('display', 'block');
こうです
style ではなく css であることに注意してください。
組み合わせて
jQueryを使わずに書くならば
lang
1document.getElementById('choice_84462_popup').style.display='block';
jQueryで書くなら
lang
1$('#choice_84462_popup').css('display', 'block');
こうなります。
投稿2015/05/27 22:23
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ここまではOKですか?
続けます。
さて、まず、大きな勘違いをなさっていますが、現在、そちら様がポップアップウィンドウだと思っている物は
ポップアップウィンドウなどではありません
ちがいます。ちがうんです。
もしも、本物のウィンドウであったならば
lang
1<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="document.getElementById('choice_84462_popup').style.display='block';">ペアを組む</a>
これは、こうなっているはずです
lang
1<a href="javascript:window.open('popupWindowSorce.htm', 'popupWindow', 'width=400, height=300, menubar=no, toolbar=no, scrollbars=yes');">ペアを組む</a>
でも、そうはなっていませんね?
じゃぁどういうことかと言うと、
lang
1 <!-- ポップアップ箇所 ここから --> 2<div class="area-popup pair-choice" id="choice_84462_popup" style="display: none">
このDIVタグに、style="display: none"とありますね?
つまり、このDIVタグで囲まれている要素は、
存在しているにも関わらず、要素のサイズは0で非表示状態で待機している
のです。
キーワードを
CSS スタイルシート display
で検索してみてくださいね。
そして、何らかのタイミングで、この要素のスタイルが、
style="display: block"と書き換えられた瞬間に
いきなり忽然と魔法のようにあらわれるのです。表示される瞬間に要素のサイズも指定されます。
そして、ご提示いただけていませんが、おそらくは、このDIVタグに対して定義されている
クラス名 area-popupか pair-choice もしくは、id名choice_84462_popupに対応する
スタイルシートにfloat属性が定義されている
これによって、他の要素の上にかぶさって表示されているがため、
一見ポップアップウィンドウのように見えているだけ
で、これはウィンドウではなく、れっきとした、このページ、同一ページ内の1要素でしかありません。
スタイルシート floatでググってみてください。
重ね合わせと、表示位置をいじることで要素をそのように見せているにすぎません。
それが証拠に、このページのソース自身に、ポップアップウィンドウだと把握していた要素が
定義されています。これが動かぬ証拠です。
本当のポップアップウィンドウであれば、別ファイルに内容が記述してあるはずなんです。
投稿2015/05/27 22:20
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
まず、おそらく、
イベントハンドラとは何か?どうやって実装するものか?
インラインスクリプトとは何か?
要素のonClick属性にスクリプトを書くというのはどういうことなのか?
これが理解できていませんね?
こちらを読んでみてください。
HTMLへのスクリプトの埋め込み
では、今現状イベントハンドラが何処にどのようにアタッチされているかを確認してみましょう
こういう時に、とっても便利なのがFireFoxというブラウザでとても強力なデバッグ機能があります
スクリプトなどの開発も、まずこれでやっておいてから、IEやクローム等、クロスブラウザ対応を行うと
楽です。
下のはイベントハンドラの状況の調査のみ行っていますが
スクリプトのデバッグ機能も強力です。途中で値を見たりもできます。活用しましょう。
使い方が分らなければ、
FireFox 開発者ツール 使い方
とでも、検索すれば沢山出てくるはずです。
![要素を右クリックします]WIDTH:600
![![イメージ説明]WIDTH:600]WIDTH:600
![イメージ説明]WIDTH:600
![イメージ説明]WIDTH:600
「ペアを組む」というリンクにはDOMで(つまりタグの属性として)イベントハンドラが定義してあることが分り、そこに書かれているスクリプト(すなわちこのリンクに対するイベントハンドラのコードその物)が定義されていることが分ります。
![![イメージ説明]WIDTH:600
ポップアップと把握している(←ここ重要あとで説明します)ウィンドウの選択をキャンセルするためのリンクには
DOMで(つまりタグの属性として)イベントハンドラが定義してあることが分り、そこに書かれているスクリプト(すなわちこのリンクに対するイベントハンドラのコードその物)が定義されていることが分ります。
ここに、window.close()と書いてある時点で・・・ 愕然としましたが、慣れてないのですから仕方ありませんね。まぁ後で説明します。
![イメージ説明]WIDTH:600
そして、そのリンクを包むPタグには・・・ jQueryでLiveつまり動的にイベントハンドラが定義されており
そこに、スクリプトの関数が接続してあります
内部の要素にイベントハンドラが定義してあり。それを包む要素にも定義してあります。
もちろん、整合性が取れていれば問題はありませんが・・・
投稿2015/05/27 22:17
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
とりあえず、動作確認をとるために欠落していた情報を、こちらである程度、推測してですが、補完したソースをまずは提示しますね。
lang
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<html> 3 4<head> 5 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 6 <link rel="stylesheet" href="./magnific-popup.css"> 7</head> 8 9<body> 10 11<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 12<!-- https://github.com/dimsemenov/Magnific-Popup/ --> 13<!-- for debug 14<script src="./jquery.magnific-popup.js"></script> 15--> 16<script src="./jquery.magnific-popup.min.js"></script> 17 18<!-- ポップアップする為のリンク --> 19<a href="#choice_84462_popup" class="btn-pair" id="choice_84462" onclick="document.getElementById('choice_84462_popup').style.display='block';">ペアを組む</a> 20 21 <!-- ポップアップ箇所 ここから --> 22<div class="area-popup pair-choice" id="choice_84462_popup" style="display: none"> 23 <div class="btnClose-choice"></div> 24 <form> 25 <input type="hidden" name="token1time" value="${ person.fbid }" /> 26 <div class="box-pair boxChoice"> 27 <div class="photo-choice"><img src="https://graph.facebook.com/${ person.photo }/picture?width=120&height=120" width="120" height="120" alt=""></div> 28 <p class="txt-choice"><em>${ person.name }</em>さんとペアを組みます。<br>よろしいですか?</p> 29 <div class="btnChoice"> 30 <p class="btnAgree-choice dblClickDisabled"> 31 <a href="#" onclick="document.hidForm_84462.submit()"> 32 決定 33 </a></p> 34 <p class="btn_disable"> 35 <a href="#" onclick="return false;">決定</a></p> 36 <p class="btnCancel-choice"><a href="#" onClick="window.close(); ">キャンセル</a></p> 37 <p class="btn_disable"><a href="#">キャンセル</a></p> 38 </div> 39 </div> 40 </form> 41 42</div> 43<!-- ポップアップ箇所 ここまで --> 44 45<script type="text/javascript"> 46<!-- 47$(function () { 48 $('#choice_84462_popup').magnificPopup({ 49 type: 'inline', 50 preloader: false 51 }); 52 $(document).on('click', '.btnCancel-choice', function (e) { 53 e.preventDefault(); 54 $.magnificPopup.close(); 55 }); 56}); 57// --> 58</script> 59 60</body> 61 62</html> 63
ちなみに、このコードは、まだメチャクチャですよ?提示されたコードを、あくまでも動作確認するために補完しただけです。
そして、スクリプトはコメントで囲むようにしてくださいね?うっかりするとコードが表示されてしまいます。
投稿2015/05/27 22:14
総合スコア501
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
おはようございます
えーと、大変申し上げにくいのですが・・・
めちゃくちゃです><
まぁ、練習でいじり倒していれば当然かぁ・・・
私も、スキルが足りない人間なので、どこまでお力になれるかわかりませんが、がんばってみますので、
しばしお付き合いください。ただし、無能な人間なので、言葉を重ねないとうまく説明できないので
冗長になりますが、どうか、どうかご容赦ください。
現に、少し前に回答した物にマイナス評価もらいました(TT。
まず、ご提示いただいたコードですが、ぱっと見ただけで、jQueryをお使いだということがわかるので
それならば、質問のタグにjQueryを付けるべきです。 あのぅ・・・ jQueryを使っているということを把握されていますよね?もし、把握されていなかったとしたら、ちょっと困ります。
そして、肝心なjQueryのバージョンがいくつなのかをソースで示すなり、質問文内で示していただかないと
皆さん回答に困ります。
次に、よく見れば、Javascript(jQuery)のライブラリを使われてますね?
であれば、その情報も欲しいです。このことも、把握されていますか?
仕方がなかったので、ソースから読み解いて探し回って、使い方を、その場で自分自身をチューニングして対応しました
少し時間を取ってしまいました。たぶん困っておいででしょうから、もう少し早く回答を書きたかったんですけどね><
投稿2015/05/27 22:13
総合スコア501
0
単純に質問として無駄な記述が多く、皆さん解答しきれないようですね。
最初はプラグインでも動かないのかなと思ったんですが、単純にjsをつかってポップアップを実現させたいと、そういう意味だと解釈しました。
そうなるとjQueryを使ったら超絶かんたんですよ。
lang
1<!-- ポップアップする為のリンク --> 2<a class="btn" href="#target">開く</a> 3 4 <!-- ポップアップ箇所 ここから --> 5<div class="popup" id="target" style="display: none"> 6 内容 7 <p class="close"><a href="#">閉じる</a></p> 8</div> 9<!-- ポップアップ箇所 ここまで --> 10 11<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 12<script type="text/javascript"> 13$(function () { 14 // 開く 15 $('.btn').click( function(){ 16 var target = $(this).attr('href'); 17 $(target).fadeIn(); 18 }); 19 //消す 20 $('.close').click( function(){ 21 var $target = $(this).parents('.popup'); 22 $target.fadeOut(); 23 }); 24}); 25</script>
投稿2015/05/21 10:19
編集2015/05/21 10:20総合スコア204
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。