1

我正在使用一些像这样的 jQueryUI 对话框:

$("#PersonDialog").dialog({
        bgiframe : true,
        autoOpen : false,
        closeOnEscape : true,
        resizable : false,
        height : 150,
        modal : true,
        open: function(){
               activeWindow="dialog"
        },
        close: function(){
               activeWindow="person"
        }
        ....
        ....
    })

当按下转义键时,我也有一些想要关闭的 div。我也使用这个答案中的代码,但它没有解决我的问题:

$("body").bindFirst("keydown", function(e) {
        console.info(activeWindow)
            if (e.keyCode == 27) {
                switch(activeWindow){
                    case "dialog":
                         //do something
                    break;
                    case "person":
                        //do something else
                    break;
                    ....
            }
        }
    })
$.fn.bindFirst = function(name, fn) {
    this.on(name, fn);
    this.each(function() {
        var handlers = $._data(this, 'events')[name.split('.')[0]];
        var handler = handlers.pop();
        handlers.splice(0, 0, handler);
    });
};

我的问题是,当对话框打开时,我按转义键,(div 和对话框)都关闭并console.info(activeWindow)返回“人”。我想这closeOnEscape是首先触发的,然后是 keydown 事件。有没有办法改变这个?

4

1 回答 1

1

jQueryUI 对话框插件将 keydown 事件处理程序绑定到对话框包装器,而不是“body”。所以当你将handler绑定到body,并且事件发生在dialog上时,dialog handler会根据事件冒泡原则首先被执行。

所以,我认为,你能做的就是调用 dialog closeOnEscape : false,并以你喜欢的任何方式处理 body 上的 ESC 键,就像你已经做的那样。

要关闭对话框,您可以$("#PersonDialog").dialog("close")从那里调用。

于 2013-05-29T09:15:33.893 回答