<dialog>
在 jQuery 的 1.11.4 版本中,有一个可以使用 的内置函数,它还允许在关闭时捕获回调参数。
$("#dialog").dialog({
autoOpen: false,
width: 500,
height: 500,
modal: true
buttons: [
{
text: "Ok",
click: function () {
$(this).dialog("close");
}
},
{
text: "Cancel",
click: function () {
$(this).dialog("close");
}
}
]
});
您的值可以在按钮单击事件的回调函数中捕获。
您甚至可以添加 HTML 以将您自己的“x”按钮附加到现有的“关闭”按钮并隐藏原始按钮,这样您就可以做任何您想做的事情:
$(document).ready(function () {
var closeHtml = '<a href="#" id="dialog-close" style="position: absolute; top: 0; right: 4px; font-size: 20px; color: #000; text-decoration: none; outline: none;">×</a>';
$("button[title='Close']").css('display', 'none').parent().append(closeHtml);
});
然后从“x”按钮将click
事件附加到ID:dialog-close
var url = 'https://www.cnn.com';
// Link to open the dialog
$("#dialog-link").click(function (event) {
var dialog = $("#dialog");
dialog.dialog("open");
dialog.html('<iframe id="dialog-body" scrolling="yes" src="' + url + '" style="border: 0; width: 100%; height: 100%;"></iframe>');
$("#dialog-close").on('click', function (e) {
// ...do whatever you want here, then...
$("button[title='Close']").click();
//e.preventDefault();
//dialog.close();
});
event.preventDefault();
});
唯一需要注意的是,由于这使用 IFrame,如果您以这种方式使用它,如果站点上的安全性阻止将外部站点引入您自己的站点,则它可能不起作用。例如,谷歌禁止在他们的网站上使用这种方式。
这应该是一个跨平台示例 - 我已经在 IE 11 中对其进行了测试。“Polyfill”,我看到其他人说这是另一种方法,它不是,也不能在 IE 中工作,因为它依赖于Promise
, IE 不支持,如本页底部所示: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise