如何重现JavaScript的confirm()函数提供的“等待”功能?

时间:2010-09-29 13:39:02

标签: javascript jquery jquery-ui

我正在尝试编写一个自定义的窗口内确认对话框(基于jQuery UI),我们可以使用它来控制窗口的所有方面(按钮文本等)。我真正喜欢的是控件的行为与内置的confirm()函数的行为完全相同(调用confirm(),脚本执行暂停直到用户单击ok或取消,confirm()返回true或false) 。我已经四处寻找解决方案,而且我的结果看起来像这样:

//title = text to be displayed for title
//text = text to be displayed in body of dialog
//func = name of function to be called upon user selection, result will be passed as first parameter
function aw_confirm(title, text, func){
    <%= ClientID %>_retVal = null;
    <%= ClientID %>_func = func;
    <%= ClientID %>_show(title, text);
    <%= ClientID %>_waitForSelection(func);
}

function <%= ClientID %>_waitForSelection(func){
    if (<%= ClientID %>_retVal != null){
        var r = <%= ClientID %>_retVal;
        <%= ClientID %>_retVal = null;
        func(r);
    }
    else setTimeout("<%= ClientID %>_waitForSelection(<%= ClientID %>_func)", 10);
}

这是一个aspx控件,因此&lt;%= ClientID%&gt; _之前的所有内容都是为了确保没有人用其他控件中的代码覆盖这些函数。

正如您所看到的,此当前设置要求程序员编写一个处理程序(此处称为func),以便在用户进行选择时调用。我真正喜欢的是aw_confirm()等到用户做出选择然后返回。有没有办法做到这一点?提前感谢您提供的任何帮助或建议!

1 个答案:

答案 0 :(得分:1)

Javascript主要基于事件。代码对事件做出反应(点击按钮,计时器等)。 JQuery UI也遵循这个范例。你正在尝试的是反对这一点,因此即使可能也会很难。您应该遵循基于事件的方法。

与使用确认的代码没有太大区别。如果你有这个:

ret = confirm("Hello User")
// do something
你现在可以写

aw_confirm("Hello user", "", function(ret){
  // do something
})

使用匿名函数作为回调。