【问题标题】:Excluding an additional id from Javascript function从 Javascript 函数中排除额外的 id
【发布时间】:2021-03-12 17:44:21
【问题描述】:

是否可以在此代码中添加一个 ID,以便在单击所需容器本身(移动导航)加上一个附加 ID(汉堡菜单-div)时不会触发。我有一个按钮来触发导航(汉堡菜单 div)。它切换一个类。所以当我点击那个特定的按钮时,这段代码应该什么都不做......这可能还是我有一个思维错误?

//Actual code and working but how to insert an additional id to avoid triggering it also on that id

document.addEventListener('mouseup', function(e) {
  var container = document.getElementById('mobile-navigation');
  if (!container.contains(e.target)) {
    container.style.display = 'none';
  }
});

//Changed to this code to select multiple ids but not working

document.addEventListener('mouseup', function(e) {
  var container = document.querySelectorAll('mobile-navigation, hamburger-menu-div');
  if (!container.contains(e.target)) {
    container.style.display = 'none';
  }
});

感谢您的支持!

编辑:添加更多代码以便更好地理解:

//Toggle nav menu to show and hide

document.getElementById("hamburger-menu-div").addEventListener("click", function() {
  var x = document.getElementById("mobile-navigation");
  if (x.style.display === "block") {
    x.style.display = "none";
  } else {
    x.style.display = "block";
  }
});


//Hide it when clicked outside

var container = document.querySelectorAll('#mobile-navigation, #hamburger-menu-div');
document.addEventListener('mouseup', function(e) {
  console.log(e.target);
  var set = 0;
  for (var i = 0; i < container.length; i++) {
    if (e.target == container[i]) {
      set = 1;
    }
  }
  if (set === 0) {
    container[1].style.display = 'none';
  }
});
.hamburger-menu-div {
  background-color: lightblue;
  width: 250px;
  height: 50px;
}

.mobile-navigation {
  background-color: lightgreen;
  width: 250px;
  display: none;
  position: fixed;
  top: 0;
  right: 0;
}
<div id="hamburger-menu-div" class="hamburger-menu-div">
  BUTTON
</div>


<div id="mobile-navigation" class="mobile-navigation">
  <p>- Navigationpoint 1</p>
  <p>- Navigationpoint 2</p>
  <p>- Navigationpoint 3</p>
  <p>- Navigationpoint 4</p>
  <p>- Navigationpoint 5</p>
</div>

【问题讨论】:

标签: javascript button menu hide display


【解决方案1】:

如果这不是您想要的,请告诉我。从您的代码看来,您想隐藏未点击的元素,对吗?

var container = document.querySelectorAll('#mobile-navigation, #hamburger-menu-div');
document.addEventListener('mouseup', function(e) {
  //console.log(container);
  for (var i = 0; i < container.length; i++) {
    if (!(container[i].contains(e.target))) {
      container[i].style.display = 'none';
    }
  }
});
<div id = 'mobile-navigation'>
lorem
</div>
<div id = 'hamburger-menu-div'>
ipsem
</div>

又一次尝试:

var container = document.querySelectorAll('#mobile-navigation, #hamburger-menu-div');
document.addEventListener('mouseup', function(e) {
  console.log(e.target);
  var set=0;
  for (var i = 0; i < container.length; i++) {
    if (e.target==container[i]) {
      set=1;
    }
  }
  if(set===0){
  container[0].style.display = 'none';
  }
});
//this does the same as the code below, but with two ids..
/*
document.addEventListener('mouseup', function(e) {
  var container = document.getElementById('mobile-navigation');
  if (!container.contains(e.target)) {
    container.style.display = 'none';
  }
});
*/
<div id = 'mobile-navigation'>
mobile-navigation
</div>
<br>
<br>
<br>
<div id = 'hamburger-menu-div'>
hamburger-menu-div
</div>
<br>
<div>
click here to close menu
</div>

第三次尝试:既然您已经提供了 HTML(这样做总是更好),并且已经解释了您想要做什么,那么这个解决方案应该可以工作。如果没有,请告诉我具体哪里不好,我会修复它。

//Toggle nav menu to show and hide

document.getElementById("hamburger-menu-div").addEventListener("click", function() {
  var x = document.getElementById("mobile-navigation");
  if (x.style.display === "block") {
    x.style.display = "none";
  } else {
    x.style.display = "block";
  }
});


//Hide it when clicked outside

var x = document.getElementById("mobile-navigation");
document.addEventListener('mouseup', function(e) {
  console.log(e.target);
  if (!(x.contains(e.target) || e.target == document.getElementById("hamburger-menu-div"))) {
    x.style.display = 'none';
  }
});
.hamburger-menu-div {
  background-color: lightblue;
  width: 250px;
  height: 50px;
}

.mobile-navigation {
  background-color: lightgreen;
  width: 250px;
  display: none;
  position: fixed;
  top: 0;
  right: 0;
}
<div id="hamburger-menu-div" class="hamburger-menu-div">
  hamburger-menu-div
</div>


<div id="mobile-navigation" class="mobile-navigation">
  <h1> mobile nav </h1>
  <p>- Navigationpoint 1</p>
  <p>- Navigationpoint 2</p>
  <p>- Navigationpoint 3</p>
  <p>- Navigationpoint 4</p>
  <p>- Navigationpoint 5</p>
</div>

【讨论】:

  • 您好。首先感谢您的努力。不抱歉。更清楚地说:我有一个按钮。该按钮触发菜单显示并在单击它时关闭(通过切换类)。我在此处显示的代码使我还可以在单​​击屏幕上的某个位置(打开的菜单本身除外)时关闭菜单。现在的问题是,我想从该代码中排除按钮(hamburger-menu-div),这样当我单击按钮时,切换仍然起作用。我可以排除菜单“可见”时要触发的代码,以便通过按钮切换也可以永久工作......
  • 因为此刻,当我单击按钮时,切换不起作用,因为一个脚本显示块,无,块。当在菜单外单击时,另一个脚本尝试不显示任何内容。所以这里肯定有冲突...:/
  • 目前还不清楚你想做什么。你能发布更多代码吗?
  • 更多上下文会更容易理解。您想在单击时关闭菜单,但不是在单击某个元素时关闭,对吗?如果是这样,为什么需要获取多个 id?你能详细说明一下吗?
  • 您好,我尝试了您的解决方案。这里的问题是,显示块、无、块之间的切换功能对于我的按钮不起作用。当导航隐藏时,按钮可以触发它阻止,然后当我点击某个地方时,除了按钮或导航之外,菜单根据需要设置为无。但是当导航打开(设置为阻止)并单击按钮时,菜单保持可见并且不会切换块,无,块。你可以在这里看到我不想达到 siteground.com 的东西。只需进入移动视图并通过按钮打开关闭菜单。也可以通过点击退出。
猜你喜欢
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 2021-07-12
  • 1970-01-01
  • 2020-04-14
相关资源
最近更新 更多