在保留回调的同时覆盖Javascript Confirm()

至此,我想在jQuery插件中覆盖标准的js confirm()函数。 我已经想出了如何使用下面的简单function布局。

 function confirm(opts) { //code } 

现在,我想做的是在上面的confirm函数中调用另一个函数,就像这样……

 function confirm(opts) { openModal(opts); } 

openModal函数将打开一个带有消息和所需按钮的自定义模式窗口。 这些按钮都是 ,其idsubmitcancelsubmit返回true, cancel返回false。 但是现在,如何根据点击的按钮返回true或false?

例如…

 $('#openModal').live('click', function() { var opts = { title:'Modal Title', message:'This is a modal!' }; var resp = confirm(opts); if(resp) // user clicked  else // user clicked  }); 

希望你明白我的意思。

可能的,但不完全如您所描述的那样。 使用confirm函数的典型方法是:

 if(confirm("Are you sure you want to submit this form?")) { form.submit(); } 

在上面的示例中,按钮按下与脚本同步返回。 执行暂停在函数内,直​​到按下按钮。

“modal dialog”只是HTML网页的整个内容的叠加。 对于浏览器,这种叠加内的按钮的工作方式与该页面内任何其他位置的按钮的工作方式相同。

由于JavaScript以异步方式处理此类按钮单击(即使用回调函数来处理事件)而不是同步,因此您尝试的方法将无法工作。

您需要更改使用confirm函数的代码的所有部分,如下所示:

 confirm("Are you sure you want to submit this form?", function(result) { if(result) { form.submit(); } }); 

这就像使用jQuery本身注册事件处理程序一样。 脚本执行立即继续,跳过匿名函数中的所有代码。 稍后,浏览器将通过您在confirm函数中注册的JavaScript事件处理程序间接调用该函数,其目的是根据需要使用truefalse调用回调函数。