7


至此,我想confirm()在一个 jQuery 插件中覆盖标准的 js 函数。我已经想出了如何使用下面的简单功能布局来做到这一点。

function confirm(opts) {
   //code
}

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

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

openModal函数将打开一个带有消息和所需按钮的自定义模式窗口。按钮都<span>带有id或。返回真并返回假。但是现在,如何根据单击的按钮返回 true 或 false? submitcancelsubmitcancel

例如...

$('#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>
});

希望你明白我的意思。

4

1 回答 1

17

可能的,但与您描述的不完全一样。使用确认功能的典型方式是:

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

于 2010-10-08T00:33:10.723 回答