如何制作手风琴不起作用,并告诉我如果元素存在,则无法读取未定义的属性“ classList”?

瓦迪姆·拉赫曼诺夫(Vadim Rakhmanov)

这就是我目前所拥有的。此代码无法正常工作。

我需要这样做-如果我按一下,则标题元素部分必须消失,再次按时,它必须出现。我不明白为什么它告诉我如果HTML中存在未定义的元素...。有人可以帮我解决这个问题吗?

var filterTrigger = document.querySelectorAll('.catalog__filter-form h3');
var filterSection = document.querySelectorAll('.catalog__filter-section');
var filterInputs = document.querySelectorAll('.catalog__filter-inputs');

for (var j = 0; j < filterTrigger.length; j++) {
  filterInputs[j].classList.add('filter-hidden');
  filterTrigger[j].addEventListener('click', function(evt) {
    evt.preventDefault();
    filterSection[j].classList.toggle('catalog__filter-section--opened');
    filterInputs[j].classList.toggle('filter-visible');
  });
}
.catalog__container {
  max-width: 1366px;
  margin: 0 auto;
}

.catalog__content-container {
  margin-left: 7.2%;
  margin-right: 7.2%;
  margin-top: 91px;
}

.catalog__filter-form {
  border: 1px solid brown;
  width: 248px;
}

.catalog__filter-form h3 {
  font-family: arial;
  font-size: 16px;
  font-weight: 500;
  line-height: 21px;
  color: black;
  margin: 0;
  padding-top: 22px;
  padding-bottom: 23px;
  padding-left: 24px;
}

.catalog__filter-section {
  padding-left: 24px;
  border-bottom: 1px solid brown;
  position: relative;
}

.catalog__filter-section::after {
  content: "";
  position: absolute;
  right: 22px;
  top: -38px;
  background-image: url("../img/arrow-down-icon.svg");
  background-repeat: no-repeat;
  width: 18px;
  height: 12px;
}

.catalog__filter-section--opened::after {
  background-image: url("../img/arrow-up-icon.svg")
}

.catalog__filter-section:last-child {
  border: none;
}

.catalog__filter-inputs {
  display: flex;
  flex-direction: column;
  display: flex;
  padding-bottom: 13px;
}

.catalog__filter-section label {
  font-family: arial;
  font-size: 14px;
  font-weight: 500;
  line-height: 18px;
  color: black;
  padding-left: 25px;
  position: relative;
  margin-bottom: 13px;
}

.catalog__filter-section input {
  appearance: none;
}

.catalog__filter-section input:checked+span {
  background-color: brown;
}

.catalog__filter-section span {
  position: absolute;
  width: 15px;
  height: 15px;
  left: 10px;
  top: 2px;
  border: 1px solid brown;
  background-color: white;
}

.filter-hidden {
  display: none;
}

.filter-visible {
  display: flex;
}
<form class="catalog__filter-form">
  <h3>Product</h3>
  <div class="catalog__filter-section catalog__filter-section--opened" tabindex="0">
    <div class="catalog__filter-inputs filter-visible">
      <label>
        <input type="checkbox" name="products" value="Necklaces" checked>
        <span></span>
        Necklaces
      </label>
      <label>
        <input type="checkbox" name="products" value="Chokers" checked>
        <span></span>
        Chokers
      </label>
      <label>
        <input type="checkbox" name="products" value="Rings">
        <span></span>
        Rings
        </label>
        <label>
          <input type="checkbox" name="products" value="Earrings" checked>
          <span></span>
          Earrings
          </label>
    </div>
  </div>
  <h3>Material</h3>
  <div class="catalog__filter-section" tabindex="0">
    <div class="catalog__filter-inputs">
      <label>
        <input type="checkbox" name="material" value="Gold">
        <span></span>
        Gold
      </label>
      <label>
        <input type="checkbox" name="material" value="Silver">
        <span></span>
        Silver
      </label>
    </div>
  </div>
  <h3>Collection</h3>
  <div class="catalog__filter-section" tabindex="0">
    <div class="catalog__filter-inputs">
      <label>
        <input type="checkbox" name="collection" value="Pink flamingo">
        <span></span>
        Pink flamingo
      </label>
      <label>
        <input type="checkbox" name="collection" value="Dreams">
        <span></span>
        Dreams
      </label>
    </div>
  </div>
  <h3>Price</h3>
  <div class="catalog__filter-section" tabindex="0">
    <div class="catalog__filter-inputs">
      <label>
        <input type="checkbox" name="products" value="Necklaces">
        Necklaces
      </label>
    </div>
  </div>
</form>
</div>

阿苏(Masoud Aghaei)

因为当您单击h3以隐藏子代时函数将运行,此时j将为4。

您通常会创建一个const变量并在其中存储元素。

var filterTrigger = document.querySelectorAll('.catalog__filter-form h3');
var filterSection = document.querySelectorAll('.catalog__filter-section');
var filterInputs = document.querySelectorAll('.catalog__filter-inputs');

function onClick(event, secEl, inpEl){
    event.preventDefault();
    secEl.classList.toggle('catalog__filter-section--opened');
    inpEl.classList.toggle('filter-visible');
  }

for (var j = 0; j < filterTrigger.length; j++) {
  const secEl = filterSection[j]
  const inpEl = filterInputs[j]
  filterInputs[j].classList.add('filter-hidden');
  filterTrigger[j].addEventListener('click', function(e){ onClick(e, secEl, inpEl) });
}
.catalog__container {
  max-width: 1366px;
  margin: 0 auto;
}

.catalog__content-container {
  margin-left: 7.2%;
  margin-right: 7.2%;
  margin-top: 91px;
}

.catalog__filter-form {
  border: 1px solid brown;
  width: 248px;
}

.catalog__filter-form h3 {
  font-family: arial;
  font-size: 16px;
  font-weight: 500;
  line-height: 21px;
  color: black;
  margin: 0;
  padding-top: 22px;
  padding-bottom: 23px;
  padding-left: 24px;
}

.catalog__filter-section {
  padding-left: 24px;
  border-bottom: 1px solid brown;
  position: relative;
}

.catalog__filter-section::after {
  content: "";
  position: absolute;
  right: 22px;
  top: -38px;
  background-image: url("../img/arrow-down-icon.svg");
  background-repeat: no-repeat;
  width: 18px;
  height: 12px;
}

.catalog__filter-section--opened::after {
  background-image: url("../img/arrow-up-icon.svg")
}

.catalog__filter-section:last-child {
  border: none;
}

.catalog__filter-inputs {
  display: flex;
  flex-direction: column;
  display: flex;
  padding-bottom: 13px;
}

.catalog__filter-section label {
  font-family: arial;
  font-size: 14px;
  font-weight: 500;
  line-height: 18px;
  color: black;
  padding-left: 25px;
  position: relative;
  margin-bottom: 13px;
}

.catalog__filter-section input {
  appearance: none;
}

.catalog__filter-section input:checked+span {
  background-color: brown;
}

.catalog__filter-section span {
  position: absolute;
  width: 15px;
  height: 15px;
  left: 10px;
  top: 2px;
  border: 1px solid brown;
  background-color: white;
}

.filter-hidden {
  display: none;
}

.filter-visible {
  display: flex;
}
<form class="catalog__filter-form">
  <h3>Product</h3>
  <div class="catalog__filter-section catalog__filter-section--opened" tabindex="0">
    <div class="catalog__filter-inputs filter-visible">
      <label>
        <input type="checkbox" name="products" value="Necklaces" checked>
        <span></span>
        Necklaces
      </label>
      <label>
        <input type="checkbox" name="products" value="Chokers" checked>
        <span></span>
        Chokers
      </label>
      <label>
        <input type="checkbox" name="products" value="Rings">
        <span></span>
        Rings
        </label>
        <label>
          <input type="checkbox" name="products" value="Earrings" checked>
          <span></span>
          Earrings
          </label>
    </div>
  </div>
  <h3>Material</h3>
  <div class="catalog__filter-section" tabindex="0">
    <div class="catalog__filter-inputs">
      <label>
        <input type="checkbox" name="material" value="Gold">
        <span></span>
        Gold
      </label>
      <label>
        <input type="checkbox" name="material" value="Silver">
        <span></span>
        Silver
      </label>
    </div>
  </div>
  <h3>Collection</h3>
  <div class="catalog__filter-section" tabindex="0">
    <div class="catalog__filter-inputs">
      <label>
        <input type="checkbox" name="collection" value="Pink flamingo">
        <span></span>
        Pink flamingo
      </label>
      <label>
        <input type="checkbox" name="collection" value="Dreams">
        <span></span>
        Dreams
      </label>
    </div>
  </div>
  <h3>Price</h3>
  <div class="catalog__filter-section" tabindex="0">
    <div class="catalog__filter-inputs">
      <label>
        <input type="checkbox" name="products" value="Necklaces">
        Necklaces
      </label>
    </div>
  </div>
</form>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档