<from>タグで、お問い合わせホームを作成していたのですが、
safariで<form>タグの送信ボタン<input type="submit">が押せないという現象におちいりました。
動作の流れは、以下の通りです。
入力フォームは、すべて必須項目。
すべて入力した後、<input id="agree">タグを選択すると、送信ボタンをクリック出来る。
送信ボタンをクリックした時、入力漏れがある場合はエラーメッセージを通知。
漏れがなければ、フォーム内容が送信され、送信完了画面へ移行される。
##フォームの内容
すべて必須項目になるように制作しています。
HTML
1<form action="booking.php" method="post" name="booking"> 2<section class="guestinfo"> 3 <h3>Guest Information</h3> 4 <div class="name clearfix"> 5 <p>First Name <br> 6 <input type="text" name="lName" value="" required placeholder="ex. Hanako"/></p> 7 <p>Last Name <br> 8 <input type="text" name="fName" value="" required placeholder="ex. Yamada" /></p> 9 </div> 10 <div class="email clearfix"> 11 <p>Email<br> 12 <input type="email" name="Email" value="" id="email" required placeholder="ex. XXX@test.com"/></p> 13 <p>Confirm Email <br> 14 <input type="email" name="cEmail" value="" id="emailC" required oninput="check01(this)" class="check01" /></p> 15 </div> 16 <div class="tel"> 17 <p>Phone Number<br> 18 <input type="tel" name="phone" value="" required placeholder="ex. 000-0000-0000"/></p> 19 </div> 20 <div class="address"> 21 <p>Address<br><textarea name="address" cols="30" rows="3" required></textarea></p> 22 </div> 23 <div class="birthday"> 24 <p>Birthday<br><input class="checkS" name="Birthday" id="Birthday" type="text" min="2018-12-14" placeholder="YYYY/mm/dd" required></p> 25 </div> 26 <div class="bloodtype"> 27 <p>Blood Type<br> 28 <select name="roomType" required> 29 <option value selected>---</option> 30 <option value="Dormitory Room">A</option> 31 <option value="Triple Room">B</option> 32 <option value="Quadruple Room">AB</option> 33 <option value="Quadruple Room">O</option> 34 </select> 35 </p> 36 </div> 37</section> 38<div class="agreement"> 39 <label><input id="agree" type="checkbox" name="tos" required />I agree to privacy.</label> 40</div> 41<p class="transmission"><input id="transmission" name="transmission" type="submit" value="Reservation >" /></p> 42</form>
入力漏れがある場合の通知設定、
<input id="agree">タグを選択すると、送信ボタンをクリック出来る設定
をJSで設定しています。
js
1// 入力漏れの通知 2$(window).on("load", function() { 3 $("select, textarea").each(function(index, element) { 4 element.addEventListener("invalid", function(e) { 5 if(element.validity.valueMissing){ 6 e.target.setCustomValidity("Required item"); 7 } else { 8 e.target.setCustomValidity(""); 9 e.preventDefault(); 10 } 11 }); 12 }); 13 $("input").each(function(index, element) { 14 element.addEventListener("invalid", function(e) { 15 if(element.validity.valueMissing){ 16 e.target.setCustomValidity("Required item"); 17 } else if ($(this).hasClass('check01')){ 18 check01(input); 19 }else{ 20 e.target.setCustomValidity(""); 21 e.preventDefault(); 22 } 23 }); 24 }); 25}); 26function check01(input) { 27 var mail = email.value; 28 var mailC = input.value; 29 if (mail != mailC){ 30 input.setCustomValidity('An email does not accord.'); 31 }else{ 32 input.setCustomValidity(''); 33 } 34} 35// [#agree]を選択すると、送信ボタンをクリック出来る。 36$(window).on("load", function() { 37 transmission(); 38 $("#agree").click(function(){ 39 transmission(); 40 }); 41 function transmission(){ 42 if ($("#agree").prop("checked") == false) { 43 $("#transmission").prop("disabled", true); 44 } else { 45 $("#transmission").prop("disabled", false); 46 } 47 } 48});
日付選択をする部分のために、
「datepicker.min.js」を読み込んでいます。
このJSの設定は、HTMLの下部に記述しています。
HTML
1<script> 2$(window).on("load", function() { 3 if((navigator.userAgent.indexOf('iPhone') > 0 && navigator.userAgent.indexOf('iPad') == -1) || navigator.userAgent.indexOf('iPod') > 0 || navigator.userAgent.indexOf('Android') > 0) { 4 } else { 5 calendar(); 6 } 7}); 8function calendar() { 9jQuery('#Birthday').datetimepicker({ 10 timepicker:false, 11 format:'Y/m/d', 12 formatDate:'Y/m/d.', 13 minDate:'2018/12/14', 14}); 15} 16</script>
上記の記述で入力の動作確認を行ったところ、
ChromeやFirefoxなどで問題なく動きました。
safariでは、
送信ボタンをクリックした時、入力漏れがある場合はエラーメッセージを通知するところまでは、正常に動くのですが、
入力漏れがない状態して送信ボタン押しても、フォーム内容が送信されず、送信完了画面へ移行されません。
やってみたけどダメだったこと
ネットで色々調べていたら、
safariでは、<input type="submit">が動かないという記述を見たので、
下記の方法を試してみました。
結果は、
送信ボタンをクリックした時、入力漏れがある場合に出るエラーメッセージの通知が出てこずに、フォーム内容が送信され、送信完了画面へ移行してしまう。
js
1function transmission() { 2 document.booking.transmission.addEventListener('click', function() { 3 document.booking.submit(); 4 }); 5}
どうしたら、safariでも想定した動きの流れになるでしょうか?
あなたの回答
tips
プレビュー