📄 【jQuery】プルダウンAの選択後、プルダウンBの内容を絞り込む
作成日: 2022/02/06
1

経緯とメモ

2022/02/05 : メモ JavaScript jQuery

前提

各地域に複数店舗あるリストから選んでもらうため、
地域を選択したら、店舗選択のプルダウンでは該当地域の店舗のみを表示したい

HTML

<select name="SELECT_AREA"  onchange="selectArea(this)">
	<opition value="初めて利用"></opition>
	<opition value="関東"></opition>
	<opition value="中部"></opition>
	<opition value="九州"></opition>
</select>
<select name="SELECT_SHOP">
	<opition value="▼選択してください" selected></opition>
	<opition value="池袋店"></opition>
	<opition value="原宿店"></opition>
	<opition value="広島店"></opition>
	<opition value="長崎店"></opition>
	<opition value="熊本店"></opition>
	<opition value="沖縄店"></opition>
</select>

考え方

  • 配列を用意しておく
var shop_data = [
   {area: '関東', shop:'池袋店'},
   {area: '関東', shop:'原宿店'},
   {area: '中部', shop:'広島店'},
   {area: '九州・沖縄', shop:'長崎店'},
   {area: '九州・沖縄', shop:'熊本店'},
   {area: '九州・沖縄', shop:'沖縄店'}
]
  • name="SELECT_AREA"のselectを選択したら発火
    • 「初めて利用」を選択した際はすべての店舗を表示
    • いずれかの地域を選択した場合、name="SELECT_SHOP"のselectは該当地域の店舗のみを表示
  • 途中で1つ目の地域を変更することも考慮する
function selectArea(area_name){
    // 選択された地域をarea_nameに代入
    area_name=area_name.value
    if(area_name == ""||area_name == "初めて利用"){
        // 未選択or初めて利用を選択したらすべての店舗を表示
        $('select[name="SELECT_AREA"] option:not(:first-child)').show();
    }else{
        // 地域を選択したらすべて非表示
        $('select[name="SELECT_AREA"] option:not(:first-child)').hide();		
        // 配列のarea名と同じものを表示させる
        var selected_area_shops = shop_data.filter(shop_name => shop_name.area == area_name)
        // 配列を順に処理
        $.each(selected_area_shops,
        function(index, val) {
            $('select[name="SELECT_AREA"] option[value="'+val.shop +'"]').show();
                }
            );
    }
}
// name="SELECT_AREA"のselectが変化したら発火
document.getelementsbyname("SELECT_AREA").onchange = selectArea();

アプリを作ってみたいウェブデザイナー。