質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2368閲覧

複数あるアコーディオンを個別に開閉させたい

whitehorse85921

総合スコア34

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/05/29 09:52

前提・実現したいこと

複数あるアコーディオンを個別に開閉させたいです。

発生している問題・エラーメッセージ

<script></script>の中に書いたプログラムが全く動きません。
エラーはありません。

該当のソースコード

JavaScript

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Document</title> 7 <style> 8 .menu { 9 background: #01558d; 10 color: white; 11 padding: 5px 0 5px 10px; 12 cursor: pointer; 13 } 14 .accordion ul { 15 margin: 0; 16 background: #e7e7e7; 17 max-height: 0; 18 overflow: hidden; 19 transition: all .8s; 20 } 21 22 .accordion.open ul { 23 max-height: 300px; 24 } 25 .accordion li { 26 padding: 5px 0; 27 } 28 </style> 29</head> 30<body> 31 <div class="accordion"> 32 <div class="menu" onclick="toggle()"> 33 メニュー 34 </div> 35 <ul> 36 <li>ハンバーガー</li> 37 <li>チーズバーガー</li> 38 <li>テリヤキバーガー</li> 39 <li>ベーコンバーガー</li> 40 <li>ベジタブルバーガー</li> 41 <li>ライスバーガー</li> 42 </ul> 43 </div> 44 <div class="accordion"> 45 <div class="menu" onclick="toggle()"> 46 メニュー 47 </div> 48 <ul> 49 <li>ハンバーガー</li> 50 <li>チーズバーガー</li> 51 <li>テリヤキバーガー</li> 52 <li>ベーコンバーガー</li> 53 <li>ベジタブルバーガー</li> 54 <li>ライスバーガー</li> 55 </ul> 56 </div> 57 <script> 58 //この関数だと全てのアコーディオンが開閉してしまいます。 59 // function toggle() { 60 // document.querySelector('.accordion').classList.toggle('open'); 61 // } 62 63 function toggle() { 64 const accordionMenu = document.querySelector('.accordion > .menu'); 65 for(let i=0; i<accordionMenu.length; i++){ 66 accordionMenu[i].classList.toggle('open'); 67 } 68 } 69 70 </script> 71</body> 72</html>

試したこと

.accordion ul {
margin: 0;
background: #e7e7e7;
max-height: 0;
overflow: hidden;
transition: all .8s;
display: none; <-A
}

.accordion.open ul { max-height: 300px; display: block; <-B }

A,Bを追加したりしましたが、全く動きませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

イベント発行の親を利用して

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>Document</title> 7 <style> 8 .menu { 9 background: #01558d; 10 color: white; 11 padding: 5px 0 5px 10px; 12 cursor: pointer; 13 } 14 .accordion ul { 15 margin: 0; 16 background: #e7e7e7; 17 max-height: 0; 18 overflow: hidden; 19 transition: all .8s; 20 } 21 22 .accordion.open ul { 23 max-height: 300px; 24 } 25 .accordion li { 26 padding: 5px 0; 27 } 28 </style> 29</head> 30<body> 31 <div class="accordion"> 32 <div class="menu" onclick="toggle(event)"> 33 メニュー 34 </div> 35 <ul> 36 <li>ハンバーガー</li> 37 <li>チーズバーガー</li> 38 <li>テリヤキバーガー</li> 39 <li>ベーコンバーガー</li> 40 <li>ベジタブルバーガー</li> 41 <li>ライスバーガー</li> 42 </ul> 43 </div> 44 <div class="accordion"> 45 <div class="menu" onclick="toggle(event)"> 46 メニュー 47 </div> 48 <ul> 49 <li>ハンバーガー</li> 50 <li>チーズバーガー</li> 51 <li>テリヤキバーガー</li> 52 <li>ベーコンバーガー</li> 53 <li>ベジタブルバーガー</li> 54 <li>ライスバーガー</li> 55 </ul> 56 </div> 57 <script> 58 function toggle(e) { 59 e.target.parentNode.classList.toggle('open'); 60 } 61 </script> 62</body> 63</html>

投稿2020/05/29 10:01

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

whitehorse85921

2020/05/29 10:07

rururu3さん、ありがとうございます。 rururu3さんのプログラムも大変参考になりました。
guest

0

ベストアンサー

javascript

1window.addEventListener('DOMContentLoaded', function(e){ 2 document.querySelectorAll('.accordion').forEach(x=>{ 3 x.addEventListener('click',()=>x.classList.toggle('open')); 4 }); 5});

投稿2020/05/29 09:58

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/05/29 09:58

.menuにあるonclickは外してください
whitehorse85921

2020/05/29 10:02

yambejpさん、ありがとうございます。 おかげでアコーディオンが個別に動きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問