首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >再次单击后在forEach函数中使用forEach不起作用

再次单击后在forEach函数中使用forEach不起作用
EN

Stack Overflow用户
提问于 2022-08-02 16:31:04
回答 1查看 48关注 0票数 0

我正在练习做FAQ手风琴,我可以在后面给出答案。

点击问题,但当我再次点击隐藏答案,它是无效的。

代码语言:javascript
复制
const questions = document.querySelectorAll('.questions')
const quesArr = Array.from(questions);

quesArr.forEach((ques) => {
  ques.addEventListener('click', (e) => {
    const next = ques.nextElementSibling;
    hidingAndShowing(ques, next)
  })
})

const hidingAndShowing = (ques, next) => {
  if (next.style.display = 'none') {
    next.style.display = 'block'
  } else if (next.style.display = 'block') {
    next.style.display = 'none'
  }
}
代码语言:javascript
复制
<div class="faqAccordian">
  <div class="acc-1 acc">
    <p class="questions ques-1">what is this?</p>

    <p class="answers">
      Lorem ipsum, dolor sit amet consectetur adipisicing elit. Natus, ipsam velit aut fugiat sit facilis quibusdam illo cupiditate dolorem eius repudiandae sapiente amet obcaecati animi neque odio cumque, quas mollitia.
    </p>
  </div>
  <div class="acc-2 acc">
    <p class="questions ques-2">what does it mean?</p>

    <p class="answers">
      Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat ad tempore quis! Delectus, dolore. Dolorum in distinctio illo similique perspiciatis quia! Error porro id similique, dicta unde blanditiis ducimus laborum.
    </p>
  </div>
  <div class="acc-3 acc">
    <p class="questions ques-3">what does it do?</p>

    <p class="answers">
      Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatibus ad reiciendis dolores? Similique numquam est facilis ullam repellendus repellat cum dicta quae fugit. Cupiditate fuga, eum fugiat doloribus quia nisi.
    </p>
  </div>
  <div class="acc-4 acc">
    <p class="questions ques-4">what does it want to do?</p>

    <p class="answers">
      Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quos perferendis placeat corrupti nam quibusdam est impedit sed optio quia repellendus laborum, ipsa error sapiente culpa consequuntur quaerat nobis incidunt quae.
    </p>
  </div>
</div>

它在第一次单击时显示nextElementSibling,但在第二次显示时,它没有做任何事情,甚至没有抛出错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 18:00:30

问题在于您使用if (next.style.display = 'none') {}的条件。

从技术上讲,有两个问题,首先是next.style.display,它没有提供任何东西,而是使用getComputedStyle函数来获取任何属性值--在本例中是'display',这是因为计算样式包含设置为一个元素的所有CSS属性。即使没有将属性设置为元素。您仍然会在计算样式中找到该属性。

第二个是if条件=中的一个小错误,应该是==

工作实例:

代码语言:javascript
复制
const questions = document.querySelectorAll('.questions')
const quesArr = Array.from(questions);

questions.forEach((ques) => {
  ques.addEventListener('click', (e) => {
    const next = ques.nextElementSibling;
    hidingAndShowing(ques, next)
  })
})

const hidingAndShowing = (ques, next) => {
  if (window.getComputedStyle(next).display == 'none') {
    next.style.display = 'block'
  } else if (window.getComputedStyle(next).display == 'block') {
    next.style.display = 'none'
  }
}
代码语言:javascript
复制
<div class="faqAccordian">
  <div class="acc-1 acc">
    <p class="questions ques-1">what is this?</p>

    <p class="answers">
      Lorem ipsum, dolor sit amet consectetur adipisicing elit. Natus, ipsam velit aut fugiat sit facilis quibusdam illo cupiditate dolorem eius repudiandae sapiente amet obcaecati animi neque odio cumque, quas mollitia.
    </p>
  </div>
  <div class="acc-2 acc">
    <p class="questions ques-2">what does it mean?</p>

    <p class="answers">
      Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat ad tempore quis! Delectus, dolore. Dolorum in distinctio illo similique perspiciatis quia! Error porro id similique, dicta unde blanditiis ducimus laborum.
    </p>
  </div>
  <div class="acc-3 acc">
    <p class="questions ques-3">what does it do?</p>

    <p class="answers">
      Lorem ipsum dolor, sit amet consectetur adipisicing elit. Voluptatibus ad reiciendis dolores? Similique numquam est facilis ullam repellendus repellat cum dicta quae fugit. Cupiditate fuga, eum fugiat doloribus quia nisi.
    </p>
  </div>
  <div class="acc-4 acc">
    <p class="questions ques-4">what does it want to do?</p>

    <p class="answers">
      Lorem, ipsum dolor sit amet consectetur adipisicing elit. Quos perferendis placeat corrupti nam quibusdam est impedit sed optio quia repellendus laborum, ipsa error sapiente culpa consequuntur quaerat nobis incidunt quae.
    </p>
  </div>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73210841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档