我正在开发一个巨大的应用程序,即使用一些子菜单,模态窗口,提示等。
现在,我想知道处理 Esc 并在此类应用中点击外部事件的正确方法。
$(document).keyup(function(e) {
if (e.keyCode == 27) { ... }
});
这用于处理 Esc 按键...如果只有一个事件可以解决,这将很简单...
但考虑一下: 1.单击打开模态窗口 2.在模态窗口内单击打开下拉菜单 3.鼠标悬停菜单项打开工具提示
现在,当按 Esc 时,首先应该关闭工具提示,再次按下菜单应该关闭,最后,模态窗口关闭
处理这个问题的正确方法是什么?
在外面点击也类似......
如果在模态窗口外单击,则应关闭整个模态窗口(包括菜单和工具提示) 单击模态窗口但在菜单外部,应关闭菜单和工具提示
答案 0 :(得分:2)
对于打开的每个窗口,对话框等,它都会添加到页面级别(全局)堆栈中。
document.keyup事件,当接收到ESC按下然后从堆栈中弹出最后一个项目,然后将其关闭。
理想情况下,可以对其进行细化以反转控制,因此document.keyup只是将事件传递给堆栈中的最后一项,它处理自身关闭,并从堆栈中移除自身。
您还必须跟踪以其他方式关闭的堆栈项目,这是反转控制将有益的地方。