【问题标题】:Custom javascript confirm dialog box自定义 javascript 确认对话框
【发布时间】:2013-11-14 12:32:02
【问题描述】:

我有一个名为showModalConfirmDialog 的函数,它创建一个自定义的javascript 对话框,带有两个按钮是/否,并使背景变暗。现在在我的函数中,我想像这样调用该函数:

var outcome = showModalConfirmDialog('Are you sure?');

我想根据点击的按钮做出反应;

if(outcome == true){
    // do something
} else {
    // do something else
}

按钮返回真/假。 Javascript代码:

button1.onclick = function(evt){
    return true;
};

button2.onclick = function(evt){
    return false;
};

我不知道我错过了什么,任何帮助将不胜感激。谢谢

【问题讨论】:

  • 有什么问题?不显示吗?
  • 它确实显示,但我希望它像 javascript 确认函数一样做出反应。我会详细解释;假设我在这个函数中有一个名为save(); 的函数我正在调用上面的代码var outcome = showModalConfirmDialog('Are you sure?'); 并且取决于outcome 我正在做一些其他的事情,问题是保存函数没有等待用户的响应/click,返回未定义。
  • 我的意思是,我是否必须阻止某些东西才能停止执行其他脚本并等待用户点击? @LuigiEdlCarno
  • 你不能这样做。内置confirm() 的特殊之处在于它同步执行。所有其他 JS 代码将异步执行,或阻塞 UI(即用户将无法交互)。解决方案是为showModalConfirmDialog() 提供ok()/cancel() 回调,或者让它返回一个promise (jQuery implementation)。

标签: javascript dialog confirm


【解决方案1】:

您无法重现本机模式的行为。相反,您可以使用回调。

这样:

function showModalConfirmDialog(msg, handler) {
    button1.onclick = function(evt){
        handler(true);
    };
    button2.onclick = function(evt){
        handler(false);
    };
}
showModalConfirmDialog('Are you sure?', function (outcome) { 
    alert(outcome ? 'yes' : 'no'); 
});

或者这样:

function showModalConfirmDialog(msg, confirmHandler, denyHandler) {
    button1.onclick = confirmHandler;
    button2.onclick = denyHandler;
}
showModalConfirmDialog(
    'Are you sure?', 
    function () { alert('yes'); }, 
    function () { alert('no'); }
);

【讨论】:

  • 感谢@wared,完成了这项工作:)
  • @ShaheMasoyan 很高兴为您提供帮助 :)
猜你喜欢
  • 2011-07-14
  • 2012-06-05
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
相关资源
最近更新 更多