根据我之前的研究,我已经能够弄清楚如何在对话框周围的叠加层上触发实时点击事件以关闭对话框.但是,这会将此对话框功能的进一步发展限制为模态.如果我将对话框设置为非模态,则没有叠加来触发click事件.如何在不使用叠加点击事件的情况下单击外部对话框时,如何设置对话框(现在不是模态)?
这是我的对话框和随后的实时点击事件,它允许我从叠加层关闭对话框:
$("#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"); } });