Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Javascript-在结束函数之前等待单击_Php_Javascript_Jquery_Html_Json - Fatal编程技术网

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。有很多视图案例供其使用。这不是其中之一