javascriptのデータ属性について分からないことがあり困っています。
同じdiv要素に入っている各画像を ”data-img” という属性名として、それぞれを0~3までの引数にしました。
それらをクリックしたときに名前がalertで表示される仕組みです。自分はそれを条件分岐で判別するようにしましたが、どの画像もif文の最初の条件しか表示されません。
たとえば dataImg[2] なら Cさんが表示されるべきなのですが、どの人もAさんになってしまいます。
改善が見つけられなかったので、皆様のお力をいただきたいです。
よろしくお願いしますm(__)m
index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="style.css"> <title>イメージギャラリー</title> </head> <body> <div class="tab" id="js-img"> <div class="tab-nav"> <a href="" class="tab-nav-item is-active" data-nav="0">Tab-0</a> <a href="" class="tab-nav-item" data-nav="1">Tab-1</a> <a href="" class="tab-nav-item" data-nav="2">Tab-2</a> <a href="" class="tab-nav-item" data-nav="3">Tab-3</a> </div> <div class="tab-contents"> <img src="../img/Aさん.png" alt="Aさん" data-img="0"> <img src="../img/Bさん.png" alt="Bさん" data-img="1"> <img src="../img/Cさん.png" alt="Cさん" data-img="2"> <img src="../img/Dさん.png" alt="Dさん" data-img="3"> </div> </div> <script type="text/javascript" src="display.js"></script> </body> </html>
display.js
(() => { const $doc = document.getElementById('js-img'); const $image = $doc.querySelectorAll('[data-img]'); const $nav = $doc.querySelectorAll('[data-nav]'); const navlen = $nav.length; const imagelen = $image.length; //初期表示 const init = () => { $image[0].style.display = 'block'; $image[1].style.display = 'none'; $image[2].style.display = 'none'; $image[3].style.display = 'none'; }; init(); const handleClick = (e) => { e.preventDefault(); const $this = e.target; const targetval = $this.dataset.nav; //対象外のnav,image全て一旦リセットする let index = 0; while(index < navlen){ $image[index].style.display = 'none'; $nav[index].classList.remove('is-active'); index++; } $doc.querySelectorAll('[data-img="' + targetval +'"]')[0].style.display = 'block'; $nav[targetval].classList.add('is-active'); } //全nav要素に対して関数を適応・発火 let index = 0; while(index < navlen){ $nav[index].addEventListener('click', (e) => handleClick(e)); index++; } const handleImg = (e) => { e.preventDefault(); const $this = e.target; const targetImg = $this.dataset.img; //問題のAさんしか表示されない条件分岐 if($image[0]){ window.alert('Aさん') }else if($image[1]){ window.alert('Bさん') }else if($image[2]){ window.alert('Cさん') }else{ window.alert('Dさん') } $doc.querySelectorAll('[data-img="'+ targetImg +'"]')[0].style.display = 'block'; } let imageIndex = 0; while(imageIndex < imagelen){ $image[imageIndex].addEventListener('click',(e)=>{ handleImg(e); }); imageIndex++; } })();
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/07 08:09
2021/01/07 08:15
2021/01/13 02:27