Как сделать так, чтобы в аккордеоне при открытии одной вкладке, закрывалась другая

Помогите закрыть вкладку при открытии другой. В идеале бы еще, чтобы средняя вкладка была открыта по умолчанию)

<section class="programms">
    <h2 class="programms-title">Программы</h2>
    <div class="FAQ-programms">
      <button class="accordion">Английский язык для дошкольников<div class="arrow-background"></div></button>
      <div class="panel">
        <div class="panel-line"></div>
        <p class="panel-text">Ответ на Вопрос 1...</p>
      </div>

      <button class="accordion">Английский язык для взрослых<div class="arrow-background"></div></button>
      <div class="panel">
        <div class="panel-line"></div>
        <p class="panel-text">Школьники учатся писать первые диктанты, сочинения, создавать проекты и защищать их. На уроках проводится много игр на иностранном языке, что привлекает и вызывает интерес у ребенка к изучению языков больше, чем просто обычный школьный урок.</p>
        <button class="button">Записаться</button>
        <div class="button-line"></div>
      </div>

      <button class="accordion">Подготовка к государственным экзаменам<div class="arrow-background"></div></button>
      <div class="panel">
        <div class="panel-line"></div>
        <p class="panel-text">Ответ на Вопрос 3 ...</p>
      </div>
    </div>
  <section/>



.accordion {
  background-color: #FFF;
  color: #2D2D2D;
  cursor: pointer;
  padding-left: 32px;
  width: 700px;
  height: 96px;
  border: none;
  text-align: left;
  outline: none;
  font-size: 24px;
  transition: 0.5s;
  border-radius: 4px;
  font-family: Merriweather;
  line-height: 30px;
  letter-spacing: 0.02em;
  padding-top: 23px;

}

.active {
  border-radius: 4px 4px 0px 0px;
  transition: max-height 0.1s ease-out;
}

.accordion:after {
  width: 8px;
  height: 8px;
  text-align: center;
  content: " ";
  transform: rotate(45deg);
  transition: all 0.2s ease-in-out;
  float: right;
  border-right: 2px solid #6B6B6E;
  border-bottom: 2px solid #6B6B6E;
  margin-top: 9px;
}

.active:after {
  width: 8px;
  height: 8px;
  text-align: center;
  content: " ";
  transform: rotate(-135deg);
  transition: all 0.2s ease-in-out;
  float: right;
  border-right: 2px solid #6B6B6E;
  border-bottom: 2px solid #6B6B6E;
  margin-top: 14px;
}

.panel {
  color: #6B6B6E;
  background-color: #fff;
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.2s ease-out;
  margin-bottom: 8px;
  width: 700px;
  font-family: Open Sans;
  font-size: 20px;
  line-height: 32px;
  border-radius: 0px 0px 4px 4px;
}

.panel-text {
  text-align: left;
  margin-left: 32px;
  margin-right: 32px;
  margin-bottom: 24px;
  margin-top: 24px;
}

.arrow-background {
  height: 48px;
  width: 48px;
  border-radius: 90px;
  border: 3px solid #E1E1E8;
  position: relative;
  right: 32px;
  bottom: 10px;
  float: right;
  display: flex;
}

.arrow-active {
  height: 48px;
  width: 48px;
  background: #E1E1E8;
  border-radius: 90px;
  border: 3px solid #E1E1E8;
  position: relative;
  right: 32px;
  bottom: 10px;
  float: right;
  display: flex;
}

.accordion:active .arrow-background {
  height: 48px;
  width: 48px;
  background: #E1E1E8;
  border-radius: 90px;
  border: 3px solid #E1E1E8;
  position: relative;
  right: 32px;
  bottom: 10px;
  float: right;
  display: flex;
}

.panel-line {
  width: 636px;
  height: 0px;
  position: relative;
  left: 32px;
  border: 1px solid #E1E1E8;
}

/* кнопка Записаться */

.button {
  margin-left: 32px;
  margin-bottom: 24px;
  height: 56px;
  width: 157px;
  border-radius: 3px;
  font-family: Open Sans;
  font-weight: 600;
  font-size: 18px;
  line-height: 24px;
  background-color: #0F4C81;
  color: #FFF;
  border: none;
}

.button-line {
  width: 157px;
  height: 6px;
  background-color: #D20004;
  margin-left: 32px;
  position: relative;
  bottom: 30px;
  border-radius: 0px 0px 4px 4px;
}




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

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

Ответы (2 шт):

Автор решения: highpassion

Можно у всех вкладок удалять класс .active перед присвоением этого класса активной вкладке

var acc = document.querySelectorAll(".accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", () => {
  acc.forEach((n => n.classList.remove('active'))
this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight){
      panel.style.maxHeight = null;
    }
    else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    }
  });
}


→ Ссылка
Автор решения: ksa

Как сделать так, чтобы в аккордеоне при открытии одной вкладке, закрывалась другая

Такое можно реализовать вот таким образом... Скрипт мой и немного добавил в стиль селектора .accordion.

const clr = o => e => e !== o && e.classList.remove('active')
const act = e => {
  const o = e.currentTarget
  o.parentNode.querySelectorAll('.active').forEach(clr(o))
  o.classList.toggle('active')
}
document.querySelectorAll('.accordion').forEach(o => o.addEventListener('click', act))
.accordion {
  background-color: #FFF;
  color: #2D2D2D;
  cursor: pointer;
  padding-left: 32px;
  width: 700px;
  height: 96px;
  border: none;
  text-align: left;
  outline: none;
  font-size: 24px;
  transition: 0.5s;
  border-radius: 4px;
  font-family: Merriweather;
  line-height: 30px;
  letter-spacing: 0.02em;
  padding-top: 23px;
  &.active + .panel {
    max-height: none ;
  }
}

.active {
  border-radius: 4px 4px 0px 0px;
  transition: max-height 0.1s ease-out;
}

.accordion:after {
  width: 8px;
  height: 8px;
  text-align: center;
  content: " ";
  transform: rotate(45deg);
  transition: all 0.2s ease-in-out;
  float: right;
  border-right: 2px solid #6B6B6E;
  border-bottom: 2px solid #6B6B6E;
  margin-top: 9px;
}

.active:after {
  width: 8px;
  height: 8px;
  text-align: center;
  content: " ";
  transform: rotate(-135deg);
  transition: all 0.2s ease-in-out;
  float: right;
  border-right: 2px solid #6B6B6E;
  border-bottom: 2px solid #6B6B6E;
  margin-top: 14px;
}

.panel {
  color: #6B6B6E;
  background-color: #fff;
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.2s ease-out;
  margin-bottom: 8px;
  width: 700px;
  font-family: Open Sans;
  font-size: 20px;
  line-height: 32px;
  border-radius: 0px 0px 4px 4px;
}

.panel-text {
  text-align: left;
  margin-left: 32px;
  margin-right: 32px;
  margin-bottom: 24px;
  margin-top: 24px;
}

.arrow-background {
  height: 48px;
  width: 48px;
  border-radius: 90px;
  border: 3px solid #E1E1E8;
  position: relative;
  right: 32px;
  bottom: 10px;
  float: right;
  display: flex;
}

.arrow-active {
  height: 48px;
  width: 48px;
  background: #E1E1E8;
  border-radius: 90px;
  border: 3px solid #E1E1E8;
  position: relative;
  right: 32px;
  bottom: 10px;
  float: right;
  display: flex;
}

.accordion:active .arrow-background {
  height: 48px;
  width: 48px;
  background: #E1E1E8;
  border-radius: 90px;
  border: 3px solid #E1E1E8;
  position: relative;
  right: 32px;
  bottom: 10px;
  float: right;
  display: flex;
}

.panel-line {
  width: 636px;
  height: 0px;
  position: relative;
  left: 32px;
  border: 1px solid #E1E1E8;
}

/* кнопка Записаться */

.button {
  margin-left: 32px;
  margin-bottom: 24px;
  height: 56px;
  width: 157px;
  border-radius: 3px;
  font-family: Open Sans;
  font-weight: 600;
  font-size: 18px;
  line-height: 24px;
  background-color: #0F4C81;
  color: #FFF;
  border: none;
}

.button-line {
  width: 157px;
  height: 6px;
  background-color: #D20004;
  margin-left: 32px;
  position: relative;
  bottom: 30px;
  border-radius: 0px 0px 4px 4px;
}
<section class="programms">
  <h2 class="programms-title">Программы</h2>
  <div class="FAQ-programms">
    <button class="accordion">Английский язык для дошкольников<div class="arrow-background"></div></button>
    <div class="panel">
      <div class="panel-line"></div>
      <p class="panel-text">Ответ на Вопрос 1...</p>
    </div>

    <button class="accordion">Английский язык для взрослых<div class="arrow-background"></div></button>
    <div class="panel">
      <div class="panel-line"></div>
      <p class="panel-text">Школьники учатся писать первые диктанты, сочинения, создавать проекты и защищать их. На уроках проводится много игр на иностранном языке, что привлекает и вызывает интерес у ребенка к изучению языков больше, чем просто обычный школьный урок.</p>
      <button class="button">Записаться</button>
      <div class="button-line"></div>
    </div>

    <button class="accordion">Подготовка к государственным экзаменам<div class="arrow-background"></div></button>
    <div class="panel">
      <div class="panel-line"></div>
      <p class="panel-text">Ответ на Вопрос 3 ...</p>
    </div>
  </div>
  <section />

→ Ссылка