お世話になります。
https://try-m.co.jp/blog/web-create/936/
上記サイトを参考に、javascriptを用い、複数の連動したプルダウンを用意しています。
データのやり取りはPHPで行っており、プルダウンを連動させる部分だけ、上記サイトを参考にjavascriptの力を借りて実装しました。
上記サイトの場合、1つ目のプルダウンで関東を選択すれば、2つ目のプルダウンは、東京、千葉、埼玉、神奈川などのみ表示される仕組みになっています。
ここで質問なのですが、一度ポストで受け取ったデータを、選択のし直しなど、修正するため画面を戻した時、選択された状態(関東・東京で選択後ポストしたら、同じく関東・東京が選択された状態)にするにはどうしたら宜しいのでしょうか?
上記サイトにあるプルダウン自体は、直ぐに実装出来たわけですが、各プルダウンを選択し、他必要事項を入力して、登録前の確認画面で入力内容に誤りがあり、元の選択(入力)画面に戻ってくるという場面を想定したとき、javascriptの知識が乏しく、任意で選択した項目は選択された状態にすることが出来ません。
前述の通り、基本PHPで作っているため、プルダウンで選択したデータはPHPで取得し変数に入れる仕組みとしており、単純にPHPの変数に入っているデータからselectedとしてしまうと、2つ目のプルダウンに関東以外の項目も選択可能と、おかしくなってしまったりで・・・
お忙しいなか恐縮ですが、ご教示のほどお願い出来たら幸いです。
よろしくお願いいたします。
■現在のコード
プルダウンデータはDBから取得しているので、以下はHTML出力した際のもので、親カテゴリの「リフォーム(室内)」、子カテゴリの「壁紙(クロス)張替え」を選択し、POSTしたときのHTMLです。
PHP、およびSQL(create table、inseart文)を張り付けるべきか悩みましたが、長くなるのでHTMLを記載した次第です。
<select class="parent" name="m_cate" size="12"> <option value = "">選択してください</option> <option value="1" class="py-1 border-top" selected>クリーニング</option> <option value="2" class="py-1 border-top" >リフォーム(室内)</option> <option value="3" class="py-1 border-top" >リフォーム(室外)</option> <option value="4" class="py-1 border-top" >家電(設備)の取付け・修理</option> <option value="5" class="py-1 border-top" >水道修理・メンテナンス</option> </select> <select class="children" name="s_cate" size="12" <?php echo $disabled; ?>> <option value = "">選択してください</option> <option value="1" data-val="1" class="py-1 border-top" >ハウスクリーニング</option> <option value="2" data-val="1" class="py-1 border-top" >ルームクリーニング</option> <option value="3" data-val="1" class="py-1 border-top" >エアコンクリーニング</option> <option value="4" data-val="2" class="py-1 border-top" selected>壁紙(クロス)張替え</option> <option value="5" data-val="2" class="py-1 border-top" >クッションフロア張替え</option> <option value="6" data-val="2" class="py-1 border-top" >フローリング張替え</option> <option value="7" data-val="3" class="py-1 border-top" >外壁塗装・コーキング防水工事</option> <option value="8" data-val="3" class="py-1 border-top" >屋根塗装・防水工事</option> <option value="9" data-val="3" class="py-1 border-top" >屋根・防水修理</option> <option value="10" data-val="4" class="py-1 border-top" >エアコン取付け・修理</option> <option value="11" data-val="4" class="py-1 border-top" >温水洗浄便座取付け</option> <option value="12" data-val="4" class="py-1 border-top" >アンテナ取付け</option> <option value="13" data-val="5" class="py-1 border-top" >貯水槽清掃</option> <option value="14" data-val="5" class="py-1 border-top" >水道水漏れ修理</option> <option value="15" data-val="5" class="py-1 border-top" >排水管洗浄</option> </select> <INPUT type="hidden" name="index"> <INPUT type="hidden" name="step1"> <button type="submit" class="btn btn-warning text-white pl-5 pr-5">Submit</button> </form> <script> <!-- var $children = $('.children'); var original = $children.html(); $('.parent').change(function() { var val1 = $(this).val(); $children.html(original).find('option').each(function() { var val2 = $(this).data('val'); if (val1 != val2) { $(this).not(':first-child').remove(); } }); if ($(this).val() == "") { $children.attr('disabled', 'disabled'); } else { $children.removeAttr('disabled'); } }); --> </script>
現状での不都合は、子カテゴリに「disabled」が設定されているため、子カテゴリのデータが選択されているときは「disabled」を外すことは出来るものの、親カテゴリと関連のない子データ、要は全てのデータが表示されてしまう状況です。
これを防ごうと子カテゴリのデータが存在する場合、テーブルからの子カテゴリの取得範囲を制限するも、PHPで行っているため、親カテゴリを変えると、子カテゴリが表示されない状況となってしまいます。
回答1件
あなたの回答
tips
プレビュー