Php Javascript-在结束函数之前等待单击
我制作了一个基本上是灯箱的东西,如果更改需要用户确认他们的密码,这个灯箱会弹出,用户在那里输入密码等等 我正在触发如下功能:Php Javascript-在结束函数之前等待单击,php,javascript,jquery,html,json,Php,Javascript,Jquery,Html,Json,我制作了一个基本上是灯箱的东西,如果更改需要用户确认他们的密码,这个灯箱会弹出,用户在那里输入密码等等 我正在触发如下功能: if(verifyPassword()) { //apply change } 验证功能是: function verifyPassword() { $('#confirmpasswordoverlay').fadeIn(300); $('#submit').click(function() { $.post('', { password: $('in
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
提前感谢不要暂停,而是提供回调:
function verifyPassword(f) {
/**
* Do all your logic here, then callback to the passed function
*/
f(result);
}
verifyPassword(function (correct) {
if (correct) {
/* Continue */
}
else { /* Other */ }
});
不要暂停,而是提供回调:
function verifyPassword(f) {
/**
* Do all your logic here, then callback to the passed function
*/
f(result);
}
verifyPassword(function (correct) {
if (correct) {
/* Continue */
}
else { /* Other */ }
});
由于jQuery
1.5.0
,您可以对延迟对象应用一些魔法:
$.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();
}
在这里,这可能不是实现目标的最优雅的方式,我只是说你可以这样做:-)由于jQuery
1.5.0
,你可以对延迟对象应用一些魔法:
$.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();
}
在这里,这可能不是实现目标的最优雅的方式,我只是说你可以这样做:-)我想你想把
$.post()
调用转换成更通用的$.ajax()
jQuery调用,然后传入异步:false
。比如:
$.ajax('', { async:false, data: {password:...}, success: function() {
// ... success callback ...
}});
我认为您需要将
$.post()
调用转换为更通用的$.ajax()
jQuery调用,并传入async:false
。比如:
$.ajax('', { async:false, data: {password:...}, success: function() {
// ... success callback ...
}});
它不会工作,因为
$。post
不会将任何内容返回到父函数。他确实需要一个新函数,可以从$中调用function@Pablo:我省略了$。post
代码,f(result)
将从中进入回调。它不会工作,因为$。post
不会向父函数返回任何内容。他确实需要一个新函数,可以从$中调用function@Pablo:我省略了$。post
code,f(result)
将从中进入回调。我回到家后就开始测试这个,从来都不知道这个技术。看起来很有趣。谢谢。这正是我要找的!但有一件事,如果用户密码错误,再次单击,它将不会运行原始函数:$.when(verifyPassword()).done(function(){…
Nevermind,我想出来了…只是不放Notify.reject()发生错误密码的地方。再次感谢,我甚至不知道v1.5已经发布了!@jAndy,而不是拥有自己的$。延迟的对象您可以从$返回延迟的对象。post
@Ratlos:您可以,但不是在OP的这个特定要求中,因为jXHR对象只有在Click我回家后就开始测试了,从来都不知道这项技术。看起来很有趣。谢谢,这正是我要找的!不过有一件事,如果用户密码错误并再次单击,它将不会运行原始函数:$。when(verifyPassword())。done(function()){…
Nevermind,我明白了…只是不放Notify.reject()发生错误密码的地方。再次感谢,我甚至不知道v1.5已经发布了!@jAndy,而不是拥有自己的$。延迟的对象您可以从$返回延迟的对象。post
@Ratlos:您可以,但不是在OP的这个特定要求中,因为jXHR对象只有在单击从不使用async=false
它会锁定UI。有很多视图案例供其使用。这不是其中之一从不使用async=false
它会锁定UI。有很多视图案例供其使用。这不是其中之一