根据我之前的研究,我已经能够弄清楚如何在对话框周围的覆盖上触发实时点击事件来关闭对话框。然而,这限制了这个对话框特性的进一步发展。如果我将对话框设置为非模态,则没有覆盖来触发点击事件。我怎么能设置对话框(现在不是模态)关闭,当我点击它外面没有使用覆盖点击事件?
这是我的对话框和随后的实时点击事件,允许我从覆盖中关闭对话框:
$("#dialog-search").dialog({
resizable: false,
height:dimensionData.height,
width: dimensionData.width,
modal: false,
title: dimensionData.title,
position: [x,y],
close: function(event, ui){
callBack(event,ui);
}
});
$('.ui-widget-overlay').live('click', function() {
$('#dialog-search').dialog("close");
});
终于找到了自己问题的答案。通过将mousedown事件绑定到文档本身,然后排除对话框,我们可以复制覆盖的活动函数的功能。在代码下面,我包含了一个jsFiddle来演示解决方案。
// Listen for document click to close non-modal dialog
$(document).mousedown(function(e) {
var clicked = $(e.target); // get the element clicked
if (clicked.is('#dlg') || clicked.parents().is('#dlg') || clicked.is('.ui-dialog-titlebar')) {
return; // click happened within the dialog, do nothing here
} else { // click was outside the dialog, so close it
$('#dlg').dialog("close");
}
});
http://jsfiddle.net/elwayman02/Z5KA2/