为什么javascript变量不会在函数之间改变?

spe*_*ife 0 javascript jquery

我的问题与以下javascript函数:

function ValidateDates() {

var valid = false;
birthD = $("#cp1_txtBirthDate").val();
initialD = $("#cp1_txtInitialDate").val();
var regexp = new RegExp("^([1-9]|(0|1|2)[0-9]|30)(/)([1-9]|1[0-2]|0[1-9])(/)((20|19|18)[0-9]{2})$");

if (birthD != "__/__/____" && initialD != "__/__/____") {
    if (regexp.test(initialD) && regexp.test(birthD)) {

        $.get("ValidateDates.aspx?BirthD=" + birthD + "&InitialD=" + initialD, function (data) {
            if (data == 0) {
                valid = true;

                $("#Dates_span").html("");
            }

            else {
                $("#Dates_span").html("*" + data);
                valid = false;

            }

        });

    }
}

return valid;
}
Run Code Online (Sandbox Code Playgroud)

在这里,当我检查变量有效时,我发现它"假"即使它是真的,因为它的初始是假的,从函数的开始,所以如何解决它,有什么不对?

Mat*_*hen 6

当您进行异步调用时,您无法返回这样的值.相反,你应该传递一个回调:

function ValidateDates(callback) {

    var valid = false;
    birthD = $("#cp1_txtBirthDate").val();
    initialD = $("#cp1_txtInitialDate").val();
    var regexp = new RegExp("^([1-9]|(0|1|2)[0-9]|30)(/)([1-9]|1[0-2]|0[1-9])(/)((20|19|18)[0-9]{2})$");

    if (birthD != "__/__/____" && initialD != "__/__/____") {
        if (regexp.test(initialD) && regexp.test(birthD)) {

            $.get("ValidateDates.aspx?BirthD=" + birthD + "&InitialD=" + initialD, function(data) {
                if (data == 0) {
                    valid = true;

                    $("#Dates_span").html("");
                }

                else {
                    $("#Dates_span").html("*" + data);
                    valid = false;

                }
                callback(valid);
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,称之为:

ValidateDates(function(isValid)
{
   // Do something with isValid
});
Run Code Online (Sandbox Code Playgroud)