Javascript - ожидание клика до завершения функции - PullRequest
0 голосов
/ 05 февраля 2011

Я сделал то, что по сути является лайтбоксом, в котором если изменение требует, чтобы пользователь подтвердил свой пароль, этот лайтбокс появляется, и пользователь вводит туда пароль и т. Д.

Я запускаю функцию следующим образом:

if(verifyPassword())
{
    //apply change
}

Функция проверки:

function verifyPassword() {
$('#confirmpasswordoverlay').fadeIn(300);

$('#submit').click(function() {
    $.post('', { password: $('input[name=password]').val() }, 
            function(check) {
                if(check.error)
                {
                    if(check.password)
                    {
                        //show password error
                        return false;
                    }
                    else
                    {
                        //show error
                        return false;
                    }
                }
                else
                {
                    return true;
                }
            }, 'json');
});

}

В основном мне нужна функция для ожидания нажатия кнопки #submit для возврата либо true, либо false.

Спасибозаранее

Ответы [ 3 ]

2 голосов
/ 05 февраля 2011

Поскольку jQuery 1.5.0, вы можете применить магию с Deferred objects:

$.when( verifyPassword() ).done(function() {
    // do something
});

Вам нужно будет немного переписать verifyPassword():

function verifyPassword() {
    var Notify = $.Deferred();
    $('#confirmpasswordoverlay').fadeIn(300);

    $('#submit').click(function() {
        $.post('', { password: $('input[name=password]').val() }, 
                function(check) {
                    if(check.error) {
                        if(check.password) {
                            //show password error
                            Notify.resolve();
                        }
                        else {
                            //show error
                            Notify.reject();
                        }
                    }
                    else {
                        return true;
                    }
                }, 'json');
        });

    return Notify.promise();
}

Возможно, это не самый элегантный способ достижения вашей цели, я просто говорю, что может сделать это следующим образом: -)

2 голосов
/ 05 февраля 2011

Не останавливайтесь, вместо этого предоставьте обратный вызов:

function verifyPassword(f) {
    /**
    * Do all your logic here, then callback to the passed function
    */
    f(result);
}
verifyPassword(function (correct) {
    if (correct) {
        /* Continue */
    }
    else { /* Other */ }
});
0 голосов
/ 05 февраля 2011

Я думаю, что вы хотите преобразовать ваш $.post() вызов в более общий $.ajax() jQuery и передать async: false.Что-то вроде:

$.ajax('', { async:false, data: {password:...}, success: function() {
    // ... success callback ...
}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...