jQuery:ESC队列

jQuery:ESC队列,jquery,click,keyup,Jquery,Click,Keyup,我正在开发一个巨大的应用程序,它使用一些子菜单、模式窗口、提示等 现在,我想知道的是在这样一个应用程序中处理Esc和单击外部事件的正确方法 $(document).keyup(function(e) { if (e.keyCode == 27) { ... } }); 这是我用来处理Esc键按下。。。这将是简单的,如果只有一个事件的火灾 P>但是考虑一下: 1.单击打开一个模式窗口 2.在模式窗口内单击打开一个下拉菜单 3.鼠标悬停在菜单项上会打开工具提示 现在,当按下Esc键时,首

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

现在,我想知道的是在这样一个应用程序中处理Esc和单击外部事件的正确方法

$(document).keyup(function(e) {
    if (e.keyCode == 27) { ... } 
});
这是我用来处理Esc键按下。。。这将是简单的,如果只有一个事件的火灾

P>但是考虑一下: 1.单击打开一个模式窗口 2.在模式窗口内单击打开一个下拉菜单 3.鼠标悬停在菜单项上会打开工具提示

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

正确的处理方法是什么

类似的情况也适用于单击外部

如果在模式窗口外单击,整个模式窗口应关闭(包括菜单和工具提示)
单击菜单外的模式窗口,应关闭菜单和工具提示,对于打开的每个窗口、对话框等,应将其添加到页面级(全局)堆栈中

document.keyup事件,当收到ESC键时,将从堆栈中弹出最后一项,并将其关闭

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


您还必须跟踪并从堆栈中删除以另一种方式关闭的项目,这是反转控制的好处。

这是您提出的一个非常好的问题。可能需要一段时间才能弄清楚。我考虑的是将所有“活动”元素及其关闭操作(移除、隐藏等)存储在一个数组中,当按escape键时,将获得数组中的最后一个值。仍然在弄清楚如何使其完全动态。@Rune,这就是我的想法。让我们谈谈这个问题和可能性。是的,我也在以同样的方式思考……谢天谢地,我正在对应用程序进行全面重新设计,我可以在每个对象的一开始就将这种行为结合起来。。。。我认为有一种更优雅的方式…比如绑定事件,然后停止传播和鸣叫