Maison  >  Questions et réponses  >  le corps du texte

Réécriture du titre : bascule déroulante limitée à la sélection de la première valeur

J'ai créé une liste déroulante qui bascule avec succès, mais elle semble sélectionner uniquement la première classe et lorsque je clique sur la deuxième liste déroulante, elle bascule le contenu de la première liste déroulante. Est-ce que j'ai râté quelque chose? Voici mon code :

const menuListDropdown = document.querySelectorAll('.menu-block-dropdown');
const menuBlock = document.querySelector('.menu-block');

menuListDropdown.forEach((menuBlockList) => {
  menuBlockList.addEventListener('click', function() {
    menuBlock.classList.toggle('menu-block-active');
  })
})
.menu-block {
  background: #fff;
  box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 5px 0px, rgba(0, 0, 0, 0.1) 0px 0px 1px 0px;
  padding: 15px;
  border-radius: 8px;
  position: absolute;
  top: 35px;
  opacity: 0;
  transition: 150ms ease;
}

.menu-block-active {
  transition: 150ms all;
  opacity: 1;
}

.menu-block-list {
  display: flex;
  flex-direction: column;
  gap: 15px;
}

.menu-block-list a {
  color: #444444;
  margin: 0 0 0.25 0;
  padding: 0;
  font-weight: 500;
}
<li class="menu-block-dropdown">
  <a href="#">Resources</a>
  <div class="menu-block">
    <div class="menu-block-list">
      <a href="#">Dropdown 1</a>
      <a href="#">Dropdown 2</a>
    </div>
  </div>
</li>
<li class="menu-block-dropdown">
  <a href="#">Blogs</a>
  <div class="menu-block">
    <div class="menu-block-list">
      <a href="#">Dropdown 3</a>
      <a href="#">Dropdown 4</a>
    </div>
  </div>
</li>

P粉511749537P粉511749537235 Il y a quelques jours334

répondre à tous(1)je répondrai

  • P粉141911244

    P粉1419112442024-02-27 00:56:42

    Le problème est que vous n'avez sélectionné qu'une seule liste déroulante. Ce que vous devez faire est donc de sélectionner la liste déroulante associée au lien de menu sur lequel vous avez cliqué.

    Voir ci-dessous les modifications que j'ai apportées dans JS

    const menuListDropdown = document.querySelectorAll('.menu-block-dropdown');
    
    // Not needed
    // const menuBlock = document.querySelector('.menu-block');
    
    menuListDropdown.forEach((menuBlockList) => {
      menuBlockList.addEventListener('click', function() {
        // Select the Block within the Target List
        const menuBlock = menuBlockList.querySelector(".menu-block");
        menuBlock.classList.toggle('menu-block-active');
      })
    })
    .menu-block {
      background: #fff;
      box-shadow: rgba(0, 0, 0, 0.1) 0px 0px 5px 0px, rgba(0, 0, 0, 0.1) 0px 0px 1px 0px;
      padding: 15px;
      border-radius: 8px;
      position: absolute;
      top: 35px;
      opacity: 0;
      transition: 150ms ease;
    }
    
    .menu-block-active {
      transition: 150ms all;
      opacity: 1;
    }
    
    .menu-block-list {
      display: flex;
      flex-direction: column;
      gap: 15px;
    }
    
    .menu-block-list a {
      color: #444444;
      margin: 0 0 0.25 0;
      padding: 0;
      font-weight: 500;
    }
    
    li {
      display: inline-block;
    }
    
    

    répondre
    0
  • Annulerrépondre