在保留回调时覆盖JavaScript确认()
-
28-09-2019 - |
题
到了,我想覆盖标准JS confirm()
jQuery插件中的功能。我已经弄清楚如何使用下面的简单函数布局来完成。
function confirm(opts) {
//code
}
现在,我想做的是在 confirm
上面的功能,像这样...
function confirm(opts) {
openModal(opts);
}
这 openModal
功能将打开带有消息和所需按钮的自定义模式窗口。按钮都是 <span>
与 id
一个 submit
或者 cancel
. submit
返回真实和 cancel
返回false。但是现在,如何根据单击的按钮返回对还是错?
例如...
$('#openModal').live('click', function() {
var opts = { title:'Modal Title', message:'This is a modal!' };
var resp = confirm(opts);
if(resp)
// user clicked <span id="submit"></span>
else
// user clicked <span id="cancel"></span>
});
希望您理解我的意思。
解决方案
这 是 可能,但不完全像您描述的那样。使用确认功能的典型方式是:
if(confirm("Are you sure you want to submit this form?")) {
form.submit();
}
在上面的示例中,按钮按同步返回到脚本。执行在函数中暂停,直到按下按钮为止。
“模态对话框”只是HTML网页的整个内容的覆盖层。在浏览器中,这样的覆盖层中的按钮与该页面中其他任何地方的按钮一样工作。
由于JavaScript会不同步(即使用回调函数来处理事件)而不是同步处理此类按钮,因此您尝试使用的方法将无效。
您需要更改使用确认功能的代码的所有部分,以使其看起来像这样:
confirm("Are you sure you want to submit this form?", function(result) {
if(result) {
form.submit();
}
});
这将起作用,就像在jQuery本身注册活动处理程序一样。脚本执行会立即继续,跳过匿名函数中的所有代码。稍后,浏览器将通过您在确认功能中注册的JavaScript事件处理程序间接调用该函数 true
或者 false
作为适当的。
不隶属于 StackOverflow