我正在使用一些像这样的jQueryUI对话框:
$("#PersonDialog").dialog({
bgiframe : true,
autoOpen : false,
closeOnEscape : true,
resizable : false,
height : 150,
modal : true,
open: function(){
activeWindow="dialog"
},
close: function(){
activeWindow="person"
}
....
....
})
我还有一些div,我想在按下escape时关闭它们。我也使用this answer中的代码,但它并没有解决我的问题:
$("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)
返回" person"。我想首先触发closeOnEscape
而不是keydown事件。有没有办法改变这个?
答案 0 :(得分:1)
jQueryUI对话框插件将keydown事件处理程序绑定到对话框包装器,而不是“body”。 因此,当您将处理程序绑定到body并且事件发生在对话框上时,将根据事件冒泡原则首先执行对话框处理程序。
所以,我认为,你可以做的 - 只是用closeOnEscape : false
调用对话框,并以你喜欢的方式处理身体上的ESC键,就像你已经做的那样。
要关闭对话框,您只需从那里拨打$("#PersonDialog").dialog("close")
。