首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用javascript禁用div元素?

如何使用javascript禁用div元素?
EN

Stack Overflow用户
提问于 2020-05-05 17:38:18
回答 2查看 69关注 0票数 0

希望大家都能保持安全,多编码。我有一个问题,并尝试了每一个解决方案,但没有一个是有效的。我确实有一个汉堡包菜单由DIV的元素,当打开这个菜单将显示所有的菜单选项。到目前为止,这是很好的工作,但一旦第二个菜单是开放的,我想阻止用户使用汉堡包菜单,直到第二个菜单关闭。在我最后一次尝试中,我使用了指针事件:没有,但信不信由你,它确实阻止了第二个菜单的工作,而不是第一个菜单。我将在这里张贴在JS中的代码,并将非常感谢任何能帮助我的提示:

代码语言:javascript
复制
document.querySelector('.hamburger-menu').addEventListener('click', () => {
    document.querySelector('.nav-wrapper').classList.toggle('change');

    document.querySelector('#home-menu').addEventListener('click', () => {
    document.getElementById("class-nav-1").style.display = "block";
    document.getElementById("#hamburger-menu").style['pointer-events'] = 'none';

  });

  document.querySelector('#close-window').addEventListener('click', () => {

  document.getElementById("class-nav-1").style.display = "none"; 
  document.getElementById('.hamburger-menu').style.pointerEvents = "auto";
  });
});
EN

回答 2

Stack Overflow用户

发布于 2020-05-05 17:46:33

问题似乎是因为在顶部的事件侦听器中添加了其他事件侦听器。你可能需要把它们分开

代码语言:javascript
复制
document.querySelector('.hamburger-menu').addEventListener('click', () => {
  document.querySelector('.nav-wrapper').classList.toggle('change');
});

document.querySelector('#close-window').addEventListener('click', () => {
  document.getElementById("class-nav-1").style.display = "none";
  document.getElementById('.hamburger-menu').style.pointerEvents = "auto";
});


document.querySelector('#home-menu').addEventListener('click', () => {
  document.getElementById("class-nav-1").style.display = "block";
  document.getElementById(".hamburger-menu").style.pointerEvents = 'none';
});
票数 0
EN

Stack Overflow用户

发布于 2020-05-05 18:05:12

我认为您应该离开这个实践,根据从DOM获得的信息来控制元素的行为。

如果您只在JS中切换一个布尔值,就可以更容易地控制菜单的行为:

代码语言:javascript
复制
const btnFirst = document.getElementById('first')
const ddMenu = document.getElementById('second')
const ddItems = document.querySelectorAll('.dd-item')
const textArea = document.getElementById('third')

// this variable controls the behavior of the main menu
let btnFirstIsEnabled = true

btnFirst.addEventListener('click', function(e) {
  if (btnFirstIsEnabled) {
    btnFirstIsEnabled = false
    ddMenu.classList.remove('hidden')
    btnFirst.classList.add('disabled')
  } else {
    textArea.innerHTML = 'Cannot open dropdown again!'
  }
})

ddItems.forEach(e => {
  e.addEventListener('click', function(e) {
    textArea.innerHTML = `Clicked: ${e.target.getAttribute('data-val')}`
    ddMenu.classList.add('hidden')
    btnFirstIsEnabled = true
    btnFirst.classList.remove('disabled')
  })
})
代码语言:javascript
复制
.main {
  cursor: pointer;
}

.main.disabled {
  color: #eaeaea;
}

.hidden {
  display: none;
}

.dd-item {
  cursor: pointer;
}
代码语言:javascript
复制
<div id="third">Clicked:</div>
<div id="first" class="main">OPEN</div>
<div id="second" class="hidden">
  <ul>
    <li class="dd-item" data-val="dd 1">Click dropdown item 1</li>
    <li class="dd-item" data-val="dd 2">Click dropdown item 2</li>
    <li class="dd-item" data-val="dd 3">Click dropdown item 3</li>
  </ul>
</div>

我只是在片段中的主菜单中添加了一些着色,以显示它不是活动的,但是行为是通过在JS中设置一个Boolean变量来控制的。

我认为,如果您让代码像这样工作,它将使您的代码更加简单。

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

https://stackoverflow.com/questions/61619453

复制
相关文章

相似问题

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