前提・実現したいこと
JS1年生です。
これまで、プラグインぐらいしか使ってこなかったので、困っています。
やりたいことは、JSONデータを使って、3段階位のソートのプルダウンリストを作成しようとおもっています。
下記のページを参考に作っているのですが、3段階目が作れずに困っています。
https://lancers.work/pref-city-form-jquery-json/
発生している問題・エラーメッセージ
3つめを見様見真似で作ったところ下記のエラーが出ています。
Uncaught TypeError: Cannot read property '101' of undefined
JSのjQuery基礎的なところがないので、無理やりくっつけてるだけとういのは重々承知なのですが・・・
cat3の中身を見に行けてないのが原因だろうとおもっているのですが、
どう解決したらよいかがわかりません。
JSONデータの構造は、こちらが指定しいて良いという条件なので、idなどは仮当てになっています。
どなたか、3つめの選択ができるようにどうしたらよいか教えてください。
よろしくお願いします。
該当のソースコード
html側
<select id="select-pref"><option value="">1つめの選択</option></select><br> <select id="select-city"><option value="">2つ目の選択</option></select><br> <select id="select-city2"><option value="">3つ目の選択</option></select>
JS側
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script> //1つめ $(function () { $.getJSON('/json/lesson.json', function (data) { for (var i = 0; i < 2; i++) { var code = i + 1; code = ('00' + code).slice(-2); $('#select-pref').append('<option value="'+code+'">'+data[i][code].pref+'</option>'); } }); }); // 2つめ $('#select-pref').on('change', function () { //1つ目が選ばれたら〜 $('#select-city option:nth-child(n+2)').remove(); // 2つ目のフォームをクリア var select_city = ('00' + $('#select-pref option:selected').val()).slice(-2); var key = Number(select_city) - 1; $.getJSON('/json/lesson.json', function (data) { for (var i = 0; i < data[key][select_city].city.length; i++) { $('#select-city').append('<option value="' + data[key][select_city].city[i].id + '">' + data[key][select_city].city[i].name + '</option>'); } }); }); // 3つめ $('#select-city').on('change', function () { $('#select-city2 option:nth-child(n+2)').remove(); // 3つ目のフォームをクリア var select_cat3 = ('00' + $('#select-city option:selected').val()).slice(-3); var key2 = Number(select_cat3) - 0; $.getJSON('/json/lesson.json', function (data) { for (var i = 0; i < data[key2][select_cat3].city.cat3.length; i++) { console.log("var i=" + i); $('#select-city2').append('<option value="' + data[key2][select_cat3].cat3[i].id + '">' + data[key2][select_cat3].cat3[i].name2 + '</option>'); } }); }); </script>
JSONファイル
[{ "01": { "id": "01", "pref": "千葉県", "city": [{ "id": "101", "name": "千葉県-千葉市", "cat3": [{ "id": "010101", "name2": "千葉県-千葉市-1区" }, { "id": "010102", "name2": "千葉県-千葉市-2区" }] }, { "id": "0102", "name": "千葉県-松戸市", "cat3": [{ "id": "010101", "name2": "千葉県-松戸市-1区" }, { "id": "010102", "name2": "千葉県-松戸市-2区" }] }] } }, { "02": { "id": "02", "pref": "東京都", "city": [{ "id": "02201", "name": "東京都-新宿区", "cat3": [{ "id": "010101", "name2": "東京都-新宿区-1丁目" }, { "id": "010102", "name2": "東京都-新宿区-2丁目" }] }, { "id": "02202", "name": "東京都-中央区", "cat3": [{ "id": "010101", "name2": "東京都-中央区-1丁目" }, { "id": "010102", "name2": "東京都-中央区-2丁目" }] }] } }]
回答2件
あなたの回答
tips
プレビュー