jQuery:ESC队列

时间:2012-09-06 18:09:32

标签: jquery click keyup

我正在开发一个巨大的应用程序,即使用一些子菜单,模态窗口,提示等。

现在,我想知道处理 Esc 并在此类应用中点击外部事件的正确方法。

$(document).keyup(function(e) {
    if (e.keyCode == 27) { ... } 
});

这用于处理 Esc 按键...如果只有一个事件可以解决,这将很简单...

但考虑一下: 1.单击打开模态窗口 2.在模态窗口内单击打开下拉菜单 3.鼠标悬停菜单项打开工具提示

现在,当按 Esc 时,首先应该关闭工具提示,再次按下菜单应该关闭,最后,模态窗口关闭

处理这个问题的正确方法是什么?

在外面点击也类似......

如果在模态窗口外单击,则应关闭整个模态窗口(包括菜单和工具提示) 单击模态窗口但在菜单外部,应关闭菜单和工具提示

1 个答案:

答案 0 :(得分:2)

对于打开的每个窗口,对话框等,它都会添加到页面级别(全局)堆栈中。

document.keyup事件,当接收到ESC按下然后从堆栈中弹出最后一个项目,然后将其关闭。

理想情况下,可以对其进行细化以反转控制,因此document.keyup只是将事件传递给堆栈中的最后一项,它处理自身关闭,并从堆栈中移除自身。

您还必须跟踪以其他方式关闭的堆栈项目,这是反转控制将有益的地方。