前提・実現したいこと
fetch apiでJSONファイルを読込み出力し、さらに出力データをアコーディオンメニューにしようとしています。
JSONファイルの出力はできたのですがアコーディオンメニューの実装中にundefinedになっていまします。
fetch apiでJSONファイルを読込み出力
javascript
1let resortListUrl = "https://script.googleusercontent.com/macros/echo?user_content_key=UoVvVXWpytG2ol8Tsn8cuej65rsqHMqxtw5xG-HYXarMzbMMgWIUurmoy2I7CHC3ZxeFk3D9SZxSnnlWUx67KmryZ18v1yhJm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJ-UaAwDg0uRrxX2mlPzzQZYW-kH8X3RdXPvSR0p8JW5c0RmzB0v9RHe0Y0CjQWvjWSZiEOHtfR-16-v9YLNsT0kkYbkGyEe8Q&lib=Mra_Vp85i2zO-JFqqYajL2ey7DX5kpduB"; 2 3fetch(resortListUrl, { 4 method: "GET", 5}) 6 .then(response => response.json()) 7 .then(json => { 8 let listHtml = "<h2 class='sub-title'>都道府県 </h2><form name='form1'>"; 9 for (j = 0; j < (json.length) - 1; j++) { 10 listHtml += "<h3 class='region'>" + json[j]["area"] + "</h3><ul class='acc-contents'>"; 11 for (i = 0; i < (json[j]["detail"].length); i++) { 12 listHtml += "<li><input type='checkbox' value='" + json[j]["detail"][i]["place_detail"]["number"] + json[j]["detail"][i]["place_detail"]["name"] + "' name='checkBox'> " + json[j]["detail"][i]["place_detail"]["name"] + "</input></li>" 13 }; 14 listHtml += "</ul>"; 15 }; 16 listHtml += "</form>"; 17 let asideWrapper = document.getElementById("aside-wrapper"); 18 asideWrapper.innerHTML = listHtml; 19 })
HTML
1 <div class="main-content wrapper"> 2 <aside> 3 <div id="aside-wrapper"></div> 4 </aside> 5 </div>
試したこと
上記のJSONデータの読込と出力はうまくいきますが、下記のtoggleメソッドを追加してアコーディオンメニューを実装しようとするとundefinedeエラーが出てしまいます
上記にthenで繋いでアコーディオンメニュー追加したい
javascript
1 .then(listHtml => { 2 let asideWrapper = document.getElementById("aside-wrapper"); 3 asideWrapper.innerHTML = listHtml; 4 document.addEventListener("load", () => { 5 const region = document.getElementsByClassName('.region'); 6 for (let i = 0; i < region.length; i++) { 7 let regionEach = region[i]; 8 let content = regionEach.nextElementSibling; 9 regionEach.addEventListener('click', () => { 10 regionEach.classList.toggle('is-active'); 11 content.classList.toggle('is-open'); 12 }); 13 } 14 }) 15 });
CSS
1.region::after { 2 transform: rotate(90deg); 3 transition-duration: .3s; 4} 5 6.region.is-active::before { 7 opacity: 0; 8} 9 10.region.is-active::after { 11 transform: rotate(0); 12} 13 14.acc-contents { 15 height: 0; 16 overflow: hidden; 17 opacity: 0; 18 transition-duration: .3s; 19} 20 21.acc-contents.is-open { 22 line-height: normal; 23}
補足情報
実装方法お分かりになる方、ご教授ください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/31 11:31
退会済みユーザー
2021/08/31 13:03
2021/08/31 13:56