dポイントプレゼントキャンペーン実施中!

https://techacademy.jp/magazine/27133

こちらを参考に連動するセレクトボックスを作成したいとおもっております。
参考にした下記ソースコードで連動したセレクトボックスは作れるのですが、
2つ目のセレクトボックス(料理名)の方にvalue値を設定するやり方が分かりません。
一番下の【使いたい連想配列】みたいにvalue値を配列から取得するやり方を教えてください。


【HTML】
<select name="genre" id="genre" onchange="createMenu(this.value)">
 <option disabled selected>ジャンルを選択してください</option>
 <option value="japaneseFoods">和食</option>
 <option value="chineseFoods">中華</option>
 <option value="italianFoods">イタリアン</option>
</select>
<select name="menuList" id="menuList" disabled>
 <option disabled selected>料理を選択してください</option>
</select>



【javascript】
const foodMenu = 
 {
   "japaneseFoods": ["寿司", "天ぷら", "おでん"],
   "chineseFoods": ["八宝菜", "麻婆豆腐", "エビチリ"],
   "italianFoods": ["パスタ", "ピザ", "ミネストローネ"]
 };

function createMenu(selectGenre){
  let menuList = document.getElementById('menuList');
  menuList.disabled = false;
  menuList.innerHTML = '';
  let option = document.createElement('option');
  option.innerHTML = '料理を選択してください';
  option.defaultSelected = true;
  option.disabled = true;
  menuList.appendChild(option);  
  
  foodMenu[selectGenre].forEach( menu => {
    let option = document.createElement('option');
    option.innerHTML = menu;
    menuList.appendChild(option);  
  });    
}



【使いたい連想配列】
const foodMenu = {
"japaneseFoods":[
{ text: '寿司', value: 'sushi' },
{ text: '天ぷら', value: 'tenpura' },
{ text: 'おでん', value: 'oden' },
],
"chineseFoods":[
{ text: '八宝菜', value: 'happousai' },
{ text: '麻婆豆腐', value: 'maabodoufu' },
{ text: 'エビチリ', value: 'ebichiri' }
]
};

よろしくお願い致します。

A 回答 (2件)

foodMenu[selectGenre].forEach(menu=>{


let option=document.createElement('option');
option.textContent = menu.text;
option.value = menu.value;
menuList.appendChild(option);
});
    • good
    • 0
この回答へのお礼

素早い回答ありがとうございます!
実現出来ました!

お礼日時:2021/01/27 15:14

こんにちは



>option.innerHTML = menu;

[option.text, option.value] = [menu.text, menu.value];
に入れ替える。
    • good
    • 1
この回答へのお礼

回答ありがとうございます!
タッチの差でyambejp様にベストアンサーつけさせていただきました。
本当にありがとうございます!
勉強になります!

お礼日時:2021/01/27 15:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!