【发布时间】:2011-10-21 04:42:23
【问题描述】:
目前,我正在努力用 jquery 对话框替换“alert”/“confirm”。
但是大多数遗留代码都是以某种异步方式编写的,这使得更改变得困难。有什么方法可以使 jquery 对话框以同步方式工作? (不要使用循环或回调函数)
For example:
function run()
{
var result = confirm("yes or no");
alert( result );
\\more codes here
}
在此示例中,警报和其他代码将在用户选择后执行。
如果我们使用 jquery 对话框 var 结果 = $dialog.open() 它将继续执行警报,这是异步的。
目前,我的解决方案是在 OK|Cancel 函数中使用回调函数。 例如:
OK: function ()
{
$dialog.close();
alert("yes");
//more codes here
}
这种方法可行,但是很难让所有同步代码都变成异步的,需要做很多改动(见下例)。 所以我在找同步的jQuery Dialog,可以吗??
例如:(实际代码比下面的例子复杂得多)
function f1()
{
if ( confirm("hello") ) f2();
alert("no");
}
function f2()
{
if( confirm("world") ) f3();
alert("no");
}
function f3()
{
return confirm("!") ;
}
另一个例子:
vendorObject.on('some-event', function() {
if(confirm("Do you really want to do that?")) {
return true;
}
else {
return false; // cancel the event
}
});
...这里供应商对象触发一个事件,如果用户确认,则必须取消该事件。只有当事件处理程序返回 false 时才能取消事件 - 同步。
【问题讨论】:
-
他们已经不是重新发明轮子了;问题的核心是需要同步对话框。标准问题 jQuery 对话框倾向于使用回调。
-
@RichardJPLeGuen - 我已经编辑了我的答案以解决您添加的示例。可悲的是,简短的回答是,由于我的答案顶部列出的原因,让您的代码保持同步并使用自定义确认对话框简直是不可能。
标签: javascript jquery asynchronous dialog synchronous