到了,我想覆盖标准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 作为适当的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top