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

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

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

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

Q&A

解決済

3回答

1261閲覧

javascript e.preventDefaultの後の挙動

big_sky

総合スコア23

JavaScript

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

0グッド

0クリップ

投稿2019/05/30 11:10

javascriptでモーダルウィンドウを作成しています。
小さな写真を用意してクリックしたら写真が大きくなりdisplay=block、×と後ろオーバレイをクリックしたらdisplay=noneで閉じるというよくある実装をしています。
しかし実装はできたのですが他のページへ移行できなくなりました。
恐らくe.preventDefault()のせいだと思うのですがこの後にどうゆう処理をしたらいいのか分かりません。
教えていただけませんか?

html

1 <div id="modal"> 2 <div class="modal-content f_wrap"> 3 <a href="#" id="modal_close">×</a> 4 <img src="images/img.jpg" width="500px" height="400px" alt="スケジュール"> 5 </div> 6 </div> 7 <p id="modal_open"> 8 <a href=""> 9 <img src="images/img.jpg" width="200px" height="200px" alt="スケジュール"> 10 </a> 11 </p> 12

css

1div#modal { 2 display: none; 3 z-index: 1; 4 position: fixed; 5 top: 0; 6 left: 0; 7 right: 0; 8 bottom: 0; 9 height: 100%; 10 width: 100%; 11 overflow: auto; 12 background-color: rgba(0,0,0,0.5); 13} 14 15div#modal div.modal-content { 16 width: 600px; 17 height: 500px; 18 position: absolute; 19 top: 100px; 20 left: calc(50% - 300px); 21 background-color: white; 22 justify-content: center; 23 align-items: center; 24} 25 26div.modal-content a { 27position: absolute; 28right: 10px; 29top: 0px; 30font-size: 40px; 31font-weight: bold; 32} 33

javascript

1 var btn = document.getElementById('modal_open'); 2 var btn_close = document.getElementById('modal_close'); 3 var modal = document.getElementById('modal'); 4 5 btn.addEventListener('click',function() { 6 modal.style.display = 'block'; 7 }); 8 9 btn_close.addEventListener('click',function() { 10 modal.style.display = 'none'; 11 }); 12 13 window.addEventListener('click',function(e) { 14 e.preventDefault(); 15 if(e.target == modal) { 16 modal.style.display = 'none'; 17 } 18 }); 19

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2019/05/30 11:45

e.preventDefault(); を外すのではダメなのですか?
guest

回答3

0

ベストアンサー

そもそも、<a> でマークアップすることが間違っています。
a要素はリンクであり、ボタンではありません

<a> を削除すれば、event.preventDefault() は不要となります。

Re: big_sky さん

投稿2019/05/30 11:45

編集2019/05/30 11:53
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

big_sky

2019/05/31 05:07

aタグによって色々挙動が変わってたので自分的には驚きでした。 ありがとうございます。
think49

2019/05/31 11:33

<a>の挙動を期待して、<a>でマークアップしたという事でしょうか。 何を期待したのか不明ですが、HTML/CSS/JavaScriptの役割を踏まえて、「どの技術を使って目的の挙動を実装すべきか」を吟味する必要があります。 マークアップを変えて実装するのは、古くはテーブルレイアウトの発想に近いと思います。
guest

0

windowにpreveneDeafultはまずいですね

javascript

1window.addEventListener('DOMContentLoaded', function(e){ 2 var btn = document.querySelector('#modal_open'); 3 var btn_close = document.querySelector('#modal_close'); 4 var modal = document.querySelector('#modal'); 5 btn.querySelector('a').addEventListener('click',function(e) { 6 e.preventDefault(); 7 modal.style.display = 'block'; 8 }); 9 btn_close.addEventListener('click',function() { 10 modal.style.display = 'none'; 11 }); 12 modal.addEventListener('click',function(e) { 13 e.preventDefault(); 14 }); 15 window.addEventListener('click',function(e) { 16 if(e.target== modal) { 17 modal.style.display = 'none'; 18 } 19 }); 20}); 21

コピペ用

コピペで動かないというので以下をコピペしてください
(HTMLやCSSは元ソースからいじってません)

javascript

1<style> 2div#modal { 3 display: none; 4 z-index: 1; 5 position: fixed; 6 top: 0; 7 left: 0; 8 right: 0; 9 bottom: 0; 10 height: 100%; 11 width: 100%; 12 overflow: auto; 13 background-color: rgba(0,0,0,0.5); 14} 15 16div#modal div.modal-content { 17 width: 600px; 18 height: 500px; 19 position: absolute; 20 top: 100px; 21 left: calc(50% - 300px); 22 background-color: white; 23 justify-content: center; 24 align-items: center; 25} 26 27div.modal-content a { 28position: absolute; 29right: 10px; 30top: 0px; 31font-size: 40px; 32font-weight: bold; 33} 34</style> 35<script> 36window.addEventListener('DOMContentLoaded', function(e){ 37 var btn = document.querySelector('#modal_open'); 38 var btn_close = document.querySelector('#modal_close'); 39 var modal = document.querySelector('#modal'); 40 btn.querySelector('a').addEventListener('click',function(e) { 41 e.preventDefault(); 42 modal.style.display = 'block'; 43 }); 44 btn_close.addEventListener('click',function() { 45 modal.style.display = 'none'; 46 }); 47 modal.addEventListener('click',function(e) { 48 e.preventDefault(); 49 }); 50 window.addEventListener('click',function(e) { 51 if(e.target== modal) { 52 modal.style.display = 'none'; 53 } 54 }); 55}); 56</script> 57<div id="modal"> 58 <div class="modal-content f_wrap"> 59 <a href="#" id="modal_close">×</a> 60 <img src="images/img.jpg" width="500px" height="400px" alt="スケジュール"> 61 </div> 62</div> 63<p id="modal_open"> 64 <a href=""> 65 <img src="images/img.jpg" width="200px" height="200px" alt="スケジュール"> 66 </a> 67</p>

投稿2019/05/30 11:42

編集2019/05/31 05:11
yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

big_sky

2019/05/31 05:06

ありがとうございます。 コピペして貼り付け他のですが反応しませんでした。 とりあえずオーバーレイをタッチしたら消える機能を無くして、×を押した時のみ消えるようにしました。 とりあえずですが。。
yambejp

2019/05/31 05:12

コピペでうごくはずですが?どうしてもダメそうなら ご使用のOS,ブラウザの種類とバージョンを明記ください
guest

0

js

1 window.addEventListener('click',function(e) { 2 e.preventDefault(); 3 if(e.target == modal) { 4 modal.style.display = 'none'; 5 }

if文の中にいれればいいだけだと思いますよ。

投稿2019/05/30 11:41

otolab

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問