아코디언 질문..오류가 나서요

아코디언 질문..오류가 나서요

QA

아코디언 질문..오류가 나서요

답변 2

본문

https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_accordion_symbol

 

여기 아코디언을 자주 사용하는데요,

오늘 이걸 사용하려고 하니 아래 이미지처럼 오류가 뜨네요..

어떤 부분을 수정해야되나요?

 

작업하는 링크를 보내드리고 싶은데, 아직 오픈이 되면 안되서 못올리네요 ㅠ

 

3697075722_1677831696.4203.jpg

이 질문에 댓글 쓰기 :

답변 2

정상 케이스


<div>
  <h2>Accordion with symbols</h2>
  <p>In this example we have added a "plus" sign to each button. When the user clicks on the button, the "plus" sign is replaced with a "minus" sign.</p>
  <button class="accordion">Section 1</button>
  <div class="panel">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
  </div>
  <button class="accordion">Section 2</button>
  <div class="panel">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
  </div>
  <button class="accordion">Section 3</button>
  <div class="panel">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
  </div>
</div>

 

에러 재현 케이스


<div>
  <h2>Accordion with symbols</h2>
  <p>In this example we have added a "plus" sign to each button. When the user clicks on the button, the "plus" sign is replaced with a "minus" sign.</p>
  <button class="accordion">Section 1</button>
  <div class="panel">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
  </div>
  <button class="accordion">Section 2</button>
  <div class="panel">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
  </div>
  <button class="accordion">Section 3</button>
</div>

 

https://developer.mozilla.org/en-US/docs/Web/API/Element/nextElementSibling

지정된 요소(위 케이스에서는 accordion)가 부모의 목록중 마지막인 경우 null 이 된다고 나옵니다.

 

따라서

this.nextElementSibling 을 받는 panel 이 null 이기 때문에

null.style.maxHeight 와 같이 접근하는 형태가 되어 문제가 되는 것이고

다음과 같이 수정해 에러를 방지할수 있습니다.


<script>
var acc = document.getElementsByClassName("accordion");
var i;
for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    var panel = this.nextElementSibling;
    if (panel == null) {
      return;
    }
    this.classList.toggle("active");
    if (panel.style.maxHeight) {
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    } 
  });
}
</script>

panel 클래스  스타일에 max-height 값이 있는지 확인해보세요.

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 2,663
© SIRSOFT
현재 페이지 제일 처음으로