This question already has answers here:
How do I return the response from an asynchronous call?

(42个答案)


2年前关闭。




我正在开发一个JavaScript类(使用jQuery)以创建自定义弹出窗口,但是我不知道如何“暂停”脚本以等待用户响应(单击“确定”按钮或取消)

该类是这样的:
function Popup()
{
}

Popup.Show = function(text)
{
    var _response;
    /* code to draw the popup elements*/

    $("#button-ok").on("click",function()
    {
        _response = "ok!"
    }

    return _response
}

例如,如果在警报中使用它,则该方法始终返回“undefined”,因为它不等待用户单击
alert(Popup.Show("hello"))
//return undefined before the popup appears

我试图使用while循环是这样的:
Popup.Show = function(text)
{
    var _response;
    var _wait = true;

    /* code to draw the window */

    $("#button-ok").on("click",function()
    {
        _wait = false;
        _response = "ok!"
    }

    while(_wait){};

    return _response
}

但不起作用(正如我预期的那样)

然后,如何等待用户点击?

谢谢大家

最佳答案

这是一个典型的JavaScript问题。

$("#button-ok").on("click",function()
{
    _response = "ok!"
}

return _response

现在让我们看看这里发生了什么。您正在为按钮设置一个onClick侦听器,并为该事件分配一个回调函数。将该函数视为传递给另一个函数的参数。它不会直接执行。

现在,您应该使用该回调函数,而不是使用像while(_wait){};这样的东西并强制其同步执行。
 Popup.Show = function(text)
 {

    $("#button-ok").on("click",function()
    {
           drawSomething('ok');
    }

 };

var drawSomthing = function(response) {
 // do something
 };

这是回调的一个不错的开始:http://javascriptissexy.com/

08-06 05:43