前提・実現したいこと
JavaScriptでセレクトボックスの値を動的に生成し、webサイトに表示しようとしています。
一つ目のセレクトボックスを選択したら、二つ目のセレクトボックスに値が自動で反映されるようにしたいのですが上手く作動しません。Scriptファイルを埋め込む場所が間違っているのでしょうか?
該当のソースコード
使用言語 HTML/JavaScript
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <!-- 1つめのセレクトボックス。これは静的に生成されている(最初から内容が決まっている) --> <select name="genre" id="genre"> <option disabled selected>ジャンルを選択してください</option> <option value="japaneseFoods">和食</option> <option value="chineseFoods">中華</option> <option value="italianFoods">イタリアン</option> </select> <!-- 2つめのセレクトボックス。1つめで選んだジャンルに応じて、動的に選択肢を追加する --> <script> //料理ジャンルの値と、それに対応するメニュー一覧を格納しておく -- [1] const foodMenu = { "japaneseFoods": ["寿司", "天ぷら", "おでん"], "chineseFoods": ["八宝菜", "麻婆豆腐", "エビチリ"], "italianFoods": ["パスタ", "ピザ", "ミネストローネ"] }; //選択されたジャンルを受け取って処理をする -- [4] const setMenuOptions(selectedGenre){ const selectFoodName = document.getElementById('food-name'); //2つめのセレクトボックスを取得し menuList.disabled = false; //選択可能な状態にする //選択されたジャンルのメニュー一覧に対して処理をする foodMenu[selectedGenre].forEach((menu, index) => { const option = document.createElement('option'); //option要素を新しく作る option.value = index; //option要素の値に、メニューを識別できる番号を指定する option.innerHTML = menu; //ユーザー向けの表示としてメニュー名を指定する selectFoodName.appendChild(option); //セレクトボックスにoption要素を追加する }); } //ジャンルを選ぶためのセレクトボックスを指定 -- [2] const genreSelect = document.getElementById('genre'); //なんらかのジャンルが選択されたら(change)、処理を行う -- [3] genreSelect.addEventListener('change', (e) => { setMenuOptions(e.target.value); //選択された料理ジャンルを引数として関数に渡す //※e.target.valueはgenreSelectで選択された値 }) </script> <select name="food-name" id="food-name" disabled> <option disabled selected>料理を選択してください</option> </select> </body> </html>試したこと
・JavaScriptはHTMLから呼び出す方法を試しました。
(エラーとなってしまい、できなかったため直接HTMLに書き込む式を選択しました)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/01 05:38