【发布时间】:2010-12-13 03:37:42
【问题描述】:
是否有默认选项通过单击屏幕上的某处而不是关闭图标来关闭 jQuery 对话框?
【问题讨论】:
-
这篇文章可能对stackoverflow.com/questions/8384067/…有帮助
标签: jquery jquery-ui dialog modal-dialog
是否有默认选项通过单击屏幕上的某处而不是关闭图标来关闭 jQuery 对话框?
【问题讨论】:
标签: jquery jquery-ui dialog modal-dialog
编辑:这是我编写的一个插件,它扩展了 jQuery UI 对话框以包含 单击外部时关闭以及其他功能: https://github.com/jasonday/jQuery-UI-Dialog-extended
这里有 3 种方法可以在点击外部 popin 时关闭 jquery UI 对话框:
如果对话框是模态的/有背景覆盖: http://jsfiddle.net/jasonday/6FGqN/
jQuery(document).ready(function() {
jQuery("#dialog").dialog({
bgiframe: true,
autoOpen: false,
height: 100,
modal: true,
open: function() {
jQuery('.ui-widget-overlay').bind('click', function() {
jQuery('#dialog').dialog('close');
})
}
});
});
如果对话框是非模态的方法一: http://jsfiddle.net/jasonday/xpkFf/
// Close Pop-in If the user clicks anywhere else on the page
jQuery('body')
.bind('click', function(e) {
if(jQuery('#dialog').dialog('isOpen')
&& !jQuery(e.target).is('.ui-dialog, a')
&& !jQuery(e.target).closest('.ui-dialog').length
) {
jQuery('#dialog').dialog('close');
}
});
非模态对话框方法二: http://jsfiddle.net/jasonday/eccKr/
$(function() {
$('#dialog').dialog({
autoOpen: false,
minHeight: 100,
width: 342,
draggable: true,
resizable: false,
modal: false,
closeText: 'Close',
open: function() {
closedialog = 1;
$(document).bind('click', overlayclickclose); },
focus: function() {
closedialog = 0; },
close: function() {
$(document).unbind('click'); }
});
$('#linkID').click(function() {
$('#dialog').dialog('open');
closedialog = 0;
});
var closedialog;
function overlayclickclose() {
if (closedialog) {
$('#dialog').dialog('close');
}
//set to one because click on dialog box sets to zero
closedialog = 1;
}
});
【讨论】:
jQuery吗?通过将代码包装在(function($) { .... })(jQuery); 中,无论noConflict 是否被使用,您都可以使用$。
在创建 JQuery Dialog 窗口时,JQuery 会插入一个 ui-widget-overlay 类。如果您将单击功能绑定到该类以关闭对话框,它应该提供您正在寻找的功能。
代码将是这样的(未经测试):
$('.ui-widget-overlay').click(function() { $("#dialog").dialog("close"); });
编辑: 以下内容也已针对 剑道 进行了测试:
$('.k-overlay').click(function () {
var popup = $("#dialogId").data("kendoWindow");
if (popup)
popup.close();
});
【讨论】:
如果您可以在一个页面上打开多个对话框,这将允许通过单击背景关闭其中的任何一个:
$('body').on('click','.ui-widget-overlay', function() {
$('.ui-dialog').filter(function () {
return $(this).css("display") === "block";
}).find('.ui-dialog-content').dialog('close');
});
(仅适用于模态对话框,因为它依赖于 '.ui-widget-overlay'。并且它确实会在单击其中一个对话框的背景时关闭所有打开的对话框。)
【讨论】:
如果您想为整个站点的所有对话框执行此操作,请尝试以下代码...
$.extend( $.ui.dialog.prototype.options, {
open: function() {
var dialog = this;
$('.ui-widget-overlay').bind('click', function() {
$(dialog).dialog('close');
});
}
});
【讨论】:
这篇文章可能会有所帮助:
http://www.jensbits.com/2010/06/16/jquery-modal-dialog-close-on-overlay-click/
另请参阅How to close a jQuery UI modal dialog by clicking outside the area covered by the box?,了解何时以及如何应用overlay 点击或实时事件,具体取决于您在页面上使用对话框的方式。
【讨论】:
在某些情况下,Jason 的回答有些矫枉过正。而$('.ui-widget-overlay').click(function(){ $("#dialog").dialog("close"); }); 并不总是适用于动态内容。
我发现适用于所有情况的解决方案是:
$('body').on('click','.ui-widget-overlay',function(){ $('#dialog').dialog('close'); });
【讨论】:
.on 是更新的,委托可能是一个更安全的选择。
如果之前帖子的代码不起作用,试试这个:
$("a.ui-dialog-titlebar-close")[0].click();
【讨论】:
面对同样的问题,我创建了一个小插件,可以在单击对话框外部时关闭对话框,无论它是模态对话框还是非模态对话框。它支持同一页面上的一个或多个对话框。
我的网站上的更多信息在这里:http://www.coheractio.com/blog/closing-jquery-ui-dialog-widget-when-clicking-outside
劳伦特
【讨论】:
试试这个:
$(".ui-widget-overlay").click(function () {
$(".ui-icon.ui-icon-closethick").trigger("click");
});
【讨论】:
有点晚了,但这是一个对我有用的解决方案。如果您的模态在覆盖标签内,那就完美了。因此,当您单击模态内容之外的任何位置时,模态将关闭。
HTML
<div class="modal">
<div class="overlay">
<div class="modal-content">
<p>HELLO WORLD!</p>
</div>
</div>
</div>
JS
$(document).on("click", function(event) {
if ($(event.target).has(".modal-content").length) {
$(".modal").hide();
}
});
【讨论】: