我已经制作了一个基本上是灯箱,如果更改需要用户确认他们的密码,这个灯箱会弹出,用户输入密码等。
我正在触发这样的功能:
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。
提前致谢
答案 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 ...
}});