javascript - 如何捕获 "closing"点击事件?

标签 javascript events click onclick popupmenu

这是一个例子。这是 Google 菜单。

enter image description here

当您单击齿轮(红十字)时,会出现菜单。当您单击打开的菜单(绿色十字)之外的任何位置时,菜单就会消失。问题是如何捕获第二个结束事件(绿色十字)。

打开菜单很简单。

var x = document.getElementById("star");          // this is id of the gear-wheel;
var y = document.getElementById("hiddenMenu");    // this is id of the menu with display = none;
x.onclick = function() {
    y.style.display = "block";
}

但是如何让它关闭呢?我使用“body”标签尝试了这种方式:

var bar = document.getElementsByTagName("body")[0];
bar.onclick = function() {
    if (y.style.display == "block") {
       y.style.display = "none";
    }
}

但是菜单打开后立即关闭。首先,当点击“星”时,它会变成“ block ”。但此后立即变为“无”,因为主体也被单击。怎么解决呢?真的有必要为“body”编写代码来捕获正确的目标事件吗?

最佳答案

star.addEventListener("click", closeIfOpen);
document.addEventListener("click", closeIfClickOutsideMenu);

关于javascript - 如何捕获 "closing"点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8900084/

相关文章:

javascript - 在将函数链接到事件时维护此上下文

android - 我可以以编程方式触发 View 的长按事件吗?

jquery - 显示隐藏多个div

java - 在java中制作我自己的事件的正确方法是什么

.net - 如何在 Windows 窗体中模仿 JavaScript 的 onBlur 事件?

python - wxPython:向多个小部件发送信号

jquery - 用jquery模拟点击链接

javascript - 选择框高度在 chrome 中不起作用

javascript - 是否可以在不调用 getter 的情况下将多个对象与 getter 合并

javascript - Knockback.js:当主干保存更新模型时,如何更新 View ?