Javascript - 在结束函数之前等待单击

时间:2011-02-04 21:33:31

标签: php javascript jquery html json

我已经制作了一个基本上是灯箱,如果更改需要用户确认他们的密码,这个灯箱会弹出,用户输入密码等。

我正在触发这样的功能:

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 个答案:

答案 0 :(得分:2)

不要停顿,而是提供回调:

function verifyPassword(f) {
    /**
    * Do all your logic here, then callback to the passed function
    */
    f(result);
}
verifyPassword(function (correct) {
    if (correct) {
        /* Continue */
    }
    else { /* Other */ }
});

答案 1 :(得分:2)

自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 :(得分:0)

我认为您希望将$.post()调用转换为更通用的$.ajax() jQuery调用,并传入async: false。类似的东西:

$.ajax('', { async:false, data: {password:...}, success: function() {
    // ... success callback ...
}});