前提・実現したいこと
クリックしても勝手に閉じないようにしたい。
画面をリロード後、モーダル内をクリックすると1回目だけ勝手に閉じてしまいます。
2回目以降はクリックしても閉じません。
ご教示いただけると幸いです。
該当のソースコード
html
1<div class="header-sp-right"> 2 <nav class="header-sp-nav"> 3 <ul class="header-sp-menu"> 4 <li class="header-sp-room header-sp-menu-list"><a href="">お部屋</a></li> 5 <li class="header-sp-food header-sp-menu-list"><a href="">お料理</a></li> 6 <li class="header-sp-spa header-sp-menu-list"><a href="">温泉</a></li> 7 </ul> 8 <div class="header-sp-right-right"> 9 <div class="header-sp-booking"> 10 <a href="" class="js-modal-sp-open"> 11 <div class="header-sp-booking-inner"> 12 <img src="img/calender.png" alt="宿泊予約のカレンダー画像"> 13 <p>宿泊予約</p> 14 </div> 15 </a> 16 </div> 17 <div class="ham" id="ham"> 18 <span class="ham-line ham-line1"></span> 19 <span class="ham-line ham-line2"></span> 20 <span class="ham-line ham-line3"></span> 21 </div> 22 </div> 23 </nav> 24 <div class="modal-sp js-modal-sp"> 25 <div class="modal-sp-bg js-modal-sp-close"> 26 <div class="modal-sp-contents"> 27 <div class="modal-sp-content-box"> 28 <form action=""> 29 <div class="name"> 30 <label for="name">名前</label> 31 <input type="text" name="name" id="name" placeholder="例:田中太郎"> 32 </div> 33 <div class="mail"> 34 <label for="mail">メールアドレス</label> 35 <input type="mail" id="mail" name="mail" placeholder="例:Example@example.com"> 36 </div> 37 <div class="form-select"> 38 <select name="select-menu" class="select-menu"> 39 <option value="one">1</option> 40 <option value="two">2</option> 41 <option value="three">3</option> 42 </select> 43 </div> 44 <div class="submit"> 45 <input type="submit" value="送信"> 46 </div> 47 </div> 48 <a href="" class="js-modal-sp-close">閉じる</a> 49 </form> 50 </div> 51 </div> 52 </div><!-- /.modal-sp --> 53 </div><!-- /.header-sp-right -->
scss
1.header-sp-right { 2 3 display: none; 4 5 @include sspc { 6 7 display: flex; 8 } 9 10 .header-sp-nav { 11 margin-right: 2em; 12 13 .header-sp-menu { 14 15 display: none; 16 17 @include sspc { 18 width: 30%; 19 height: 100vh; 20 display: flex; 21 flex-direction: column; 22 background-color: rgba(0, 0, 0, 0.16); 23 transition: 0.3s; 24 position: fixed; 25 z-index: 20; 26 top: 7em; 27 right: -40%; 28 } 29 30 &:first-child { 31 padding-top: 20px; 32 } 33 34 .header-sp-menu-list { 35 36 a { 37 display: block; 38 font-size: 21px; 39 color: #FFFFFF; 40 padding: 1em; 41 } 42 } 43 } 44 45 .header-sp-right-right { 46 display: flex; 47 48 .header-sp-booking { 49 50 a { 51 display: block; 52 53 .header-sp-booking-inner { 54 width: 13em; 55 height: 4.4em; 56 background-color: #978F10; 57 display: flex; 58 align-items: center; 59 justify-content: center; 60 61 img { 62 width: 2em; 63 height: 2em; 64 padding-right: 1em; 65 } 66 67 p { 68 font-size: 1.6em; 69 font-weight: bold; 70 line-height: 3; 71 color: #FFFFFF; 72 } 73 } 74 } 75 } 76 77 .ham { 78 display: none; 79 width: 5em; 80 height: 5em; 81 cursor: pointer; 82 position: relative; 83 84 @include sspc { 85 display: block; 86 } 87 88 .ham-line { 89 position: absolute; 90 left: 1em; 91 width: 3em; 92 height: 0.2em; 93 background-color: #FFFFFF; 94 transition: all 0.3s; 95 } 96 97 .ham-line1 { 98 top: 0.7em; 99 } 100 101 .ham-line1.open { 102 transform: rotate(45deg); 103 top: 2em; 104 } 105 106 .ham-line2 { 107 top: 1.9em; 108 } 109 110 .ham-line2.open { 111 width: 0; 112 } 113 114 .ham-line3 { 115 top: 3.2em; 116 } 117 118 .ham-line3.open { 119 transform: rotate(-45deg); 120 top: 2em; 121 } 122 } 123 } 124 125 } 126 127 .header-sp-menu.open { 128 right: 0; 129 } 130 131 .modal-sp { 132 display: none; 133 height: 100vh; 134 position: fixed; 135 top: 0; 136 left: 0; 137 width: 100%; 138 139 .modal-sp-bg { 140 background: rgba(0, 0, 0, 0.8); 141 height: 100vh; 142 position: absolute; 143 width: 100%; 144 z-index: 40; 145 146 .modal-sp-contents { 147 background: #FFFFFF; 148 padding: 1em; 149 position: absolute; 150 top: 50%; 151 left: 50%; 152 transform: translate(-50%, -50%); 153 width: 70%; 154 155 form { 156 padding: 6em; 157 158 } 159 } 160 } 161 } 162 }
javascript
1 $(function () { 2 3 //ハンバーガーメニュー開閉 4 $('.ham').on('click', function () { 5 $('.header-sp-menu, .ham, .ham-line1, .ham-line2, .ham-line3').toggleClass('open'); 6 }); 7 8 //ハンバーガーメニューのナビリンククリック後自動で閉じる 9 $('.header-sp-menu-list a').on('click', function () { 10 $('.ham').click(); 11 }); 12 13 //スクロールしたらヘッダーが変わる 14 window.addEventListener('scroll', function () { 15 var header = document.querySelector('header'); 16 header.classList.toggle('scroll-nav', window.scrollY > 0); 17 }); 18 19 20 //宿泊予約モーダル(SP) 21 $('.js-modal-sp-open').on('click', function () { 22 $('.js-modal-sp').fadeIn(); 23 24 //ハンバーガーメニューをクリックしていても、宿泊予約がクリックされるとメニューが閉じる 25 $('.header-sp-menu, .ham, .ham-line1, .ham-line2, .ham-line3').removeClass('open'); 26 27 return false; 28 }); 29 $('.js-modal-sp-close').on('click', function () { 30 $('.js-modal-sp').fadeOut(); 31 32 //しかし、.formをクリックでキャンセルさせる 33 $('form').on('click', function (e) { 34 e.stopPropagation(); 35 }); 36 return false; 37 }); 38 39});
試したこと
「閉じるボタンか背景クリックでモーダルを閉じる」と書いていたjavascriptに、「formをクリックでキャンセルさせる」というコードを書き足しました。
補足情報(FW/ツールのバージョンなど)
scssで書いています。
追記
参考サイト
回答2件
あなたの回答
tips
プレビュー