테스트 사이트 - 개발 중인 베타 버전입니다

아코디언 질문..오류가 나서요 채택완료

주사쟝 2년 전 조회 1,924

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

 

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

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

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

 

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

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
2년 전

정상 케이스

</p>

<p><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></p>

<p>  <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></p>

<p>  <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></p>

<p>

 

에러 재현 케이스

</p>

<p><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></p>

<p>  <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></p>

<p>  <button class="accordion">Section 3</button>

</div></p>

<p>

 

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

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

 

따라서

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

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

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

</p>

<p><script>

var acc = document.getElementsByClassName("accordion");

var i;</p>

<p>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></p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

주사쟝
2년 전
감사합니다. 다시 한번 살펴볼게요.

첫번째 아코디언은 오류가 나는데, 두번째 세번째 판넬은 열리네요.
뭐가 문젠지 모르겠네요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

핑크빈
2년 전

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

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

주사쟝
2년 전
max-height:0; 으로 되어있습니다.
첫번째 아코디언은 오류가 나는데, 두번째 세번째 판넬은 열리네요.
뭐가 문젠지 모르겠네요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인