次のような 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
それがキーダウンイベントよりも最初に発生すると思います。これを変更する方法はありますか?