Poczekaj na zdarzenie użytkownika [duplikat]

To pytanie ma już tutaj odpowiedź:

Jak zwrócić odpowiedź z połączenia asynchronicznego? 33 odpowiedzi

Opracowuję klasę javascript (z jQuery), aby utworzyć niestandardowe popup, ale nie mogę dowiedzieć się, jak „wstrzymać” skrypt, aby czekać na odpowiedź użytkownika (kliknij przycisk OK lub anuluj)

klasa jest taka:

function Popup()
{
}

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

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

    return _response
}

jeśli na przykład użyjesz go w alercie, metoda zawsze zwraca „undefined”, ponieważ nie czeka na kliknięcie przez użytkownika

alert(Popup.Show("hello"))
//return undefined before the popup appears

Próbowałem użyć pętli while w ten sposób:

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
}

ale nie działa (jak się spodziewałem)

Następnie, jak mam czekać na kliknięcie użytkownika?

Dziękuje za wszystko

questionAnswers(3)

yourAnswerToTheQuestion