フォームでselect要素の内容によって
次のフォーム部品を条件分岐させたいと思うのですが、
なぜかスマホでうまく挙動しません。
html
1<form id="form" action="test.php" method="post"> 2 <div class="form-group"> 3 <p class="form-title">ご連絡方法</p> 4 <span class="select-area"> 5 <select name="ご連絡方法" id="select" class="validate[required]" onChange="changeSelect();"> 6 <option>選択してください</option> 7 <option value="メールアドレス">メールアドレス</option> 8 <option value="LINE">LINE</option> 9 <option value="Facebook">Facebook</option> 10 </select> 11 </span> 12 </div> 13</form> 14<div class="form-group form-select form0"> 15 <p class="form-title">ご連絡先</p> 16 <input type="text" name="ご連絡先" placeholder="ご連絡先をご入力ください" class="validate[required]"> 17</div> 18<div class="form-group form-select form1"> 19 <p class="form-title">ご連絡先</p> 20 <input type="text" name="ご連絡先" placeholder="メールアドレス" class="validate[required]"> 21</div> 22<div class="form-group form-select form2"> 23 <p class="form-title">ご連絡先</p> 24 <input type="text" name="ご連絡先" placeholder="LINEID" class="validate[required]"> 25</div> 26<div class="form-group form-select form3"> 27 <p class="form-title">ご連絡先</p> 28 <input type="text" name="ご連絡先" placeholder="FBアカウント" class="validate[required]"> 29</div>
javascript
1function changeSelect(){ 2 $('.form-select').css('display', 'none'); 3 4 var selectVal = $('#select').val(); 5 if(selectVal == 'メールアドレス'){ 6 $('.form0').css('display', 'block'); 7 }else if(selectVal == 'LINE'){ 8 $('.form1').css('display', 'block'); 9 }else if(selectVal == 'Facebook'){ 10 $('.form2').css('display', 'block'); 11 }else{ 12 $('.form0').css('display', 'block'); 13 } 14}
こちらがonChange()を用いたもので、
javascript
1$('#select').on('change', function(){ 2 $('.form-select').css('display', 'none'); 3 4 var selectVal = $('#select').val(); 5 if(selectVal == 'メールアドレス'){ 6 $('.form1').css('display', 'block'); 7 }else if(selectVal == 'LINE'){ 8 $('.form2').css('display', 'block'); 9 }else if(selectVal == 'Facebook'){ 10 $('.form3').css('display', 'block'); 11 }else{ 12 $('.form0').css('display', 'block'); 13 } 14});
こちらがchange()を用いたものです。
上のselectでメールアドレス、LINE、FBの選んだものに合わせてplaceholderの文字を変えたいと思い、チャレンジして、PC上では変化するのですが、スマホだと変化しません。。
上記二つともうまくいきませんでした。。
どなたかお分かりの方いらっしゃいましたら教えていただけると幸いです。。
スマートフォンの機種、利用しているブラウザなどの環境情報もご提示ください。また、そもそもchangeイベントが発生しているかどうか、alert()やconsole.log()などで確認した結果も教えてください。
ご回答ありがとうございます!MacのChromeで確認したところ上のchangeSelect()はイベントがきちんと動いていたのですが、下のchangeイベントは動いていませんでした。また、スマホではiphoneでsafari、Chromeで動きませんでした。
changeSelect()とchangeは同居させないほうが良いと思います。どちらかだけにしてみてください。あとは、idをselectから変えてみる、ご連絡先の入力フォームをclassではなくidを与えて指定してみる、ご連絡先の入力フォームを1つにしてplaceholderだけを書き換える を試してみてください。
「ご連絡先の入力フォームを1つにしてplaceholderだけを書き換える」やり方に転換する方が現実的かもしれません。同じnameのinputが置いてあるのは好ましくありませんし。
これ、回答のほうが良いですね。回答にうつします。