【问题标题】:Overriding Javascript Confirm() while preserving the callback在保留回调的同时覆盖 Javascript Confirm()
【发布时间】:2010-10-07 22:09:04
【问题描述】:


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

function confirm(opts) {
   //code
}

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

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

openModal 函数将打开一个自定义模式窗口,其中包含消息和所需按钮。这两个按钮都是<span>idsubmitcancelsubmit 返回真,cancel 返回假。但是现在,如何根据单击的按钮返回 true 或 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>
});

希望你明白我的意思。

【问题讨论】:

    标签: jquery callback overriding confirm


    【解决方案1】:

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

    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 事件处理程序间接调用该函数,其目的是根据需要使用truefalse 调用回调函数。

    【讨论】:

    • +1 我很遗憾confirm() 的原始、真正模态的方式无法模仿,但它就是这样
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2014-10-08
    相关资源
    最近更新 更多