Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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
javascript的最佳代码实践if-then-else_Javascript_Jquery_If Statement - Fatal编程技术网

javascript的最佳代码实践if-then-else

javascript的最佳代码实践if-then-else,javascript,jquery,if-statement,Javascript,Jquery,If Statement,我正在寻找javascript和jquery专家,让我走上正确的道路。我有下面的代码,我注意到在函数完成之前,代码通过focus()并返回false;再次,一旦函数返回false;有人能告诉我写这段代码的正确方法吗。谢谢 // validate passwords if(!VerifyPassword($("#CurrentPassword").val())) { $("#CurrentPassword").focus(); return false; } if($("#NewP

我正在寻找javascript和jquery专家,让我走上正确的道路。我有下面的代码,我注意到在函数完成之前,代码通过focus()并返回false;再次,一旦函数返回false;有人能告诉我写这段代码的正确方法吗。谢谢

// validate passwords
if(!VerifyPassword($("#CurrentPassword").val())) {
    $("#CurrentPassword").focus();
    return false;
}
if($("#NewPassword").val() != "") { 
    if(!ValidatePassword($("#NewPassword").val())) {
        $("#NewPassword").focus();
        return false;
    }
    if($("#NewPassword").val() != $("#RetypePassword").val()) {
        alert("The new password is not the same as the retyped password");
        return false;
    }
}

function ValidatePassword(password) {

    if(password.length < 6) { 
        alert("Password must contain at least six characters!"); 
        return false; 
    } 

    re = /[0-9]/; 
    if(!re.test(password)) { 
        alert("Password must contain at least one number (0-9)!"); 
        return false; 
    } 

    re = /[a-z]/; 
    if(!re.test(password)) { 
        alert("Password must contain at least one lowercase letter (a-z)!"); 
        return false; 
    } 

    re = /[A-Z]/; 
    if(!re.test(password)) { 
        alert("Password must contain at least one uppercase letter (A-Z)!"); 
        return false; 
    }

    return true;
}

function VerifyPassword(password) {

    urlString = "../sql/db_verify_password.php?Password=" + password;

    /* send calendar updated information and return status message */
    $.ajax({
        type: "GET",
        url:  urlString,
        dataType: "xml",
        success: function(xml) {
            $(xml).find('Results').each(function() {
                var status = $(this).find('Status').text();

                if(status != "OK") { 
                    alert(status);
                    return false;
                }
            });
        } 
    });
}
//验证密码
如果(!VerifyPassword($(“#CurrentPassword”).val()){
$(“#当前密码”).focus();
返回false;
}
如果($(“#NewPassword”).val()!=”){
如果(!ValidatePassword($(“#NewPassword”).val()){
$(“#新密码”).focus();
返回false;
}
if($(“#新密码”).val()!=$(“#重新键入密码”).val()){
警报(“新密码与重新键入的密码不同”);
返回false;
}
}
函数ValidatePassword(密码){
如果(password.length<6){
警报(“密码必须至少包含六个字符!”);
返回false;
} 
re=/[0-9]/;
如果(!re.test(密码)){
警报(“密码必须至少包含一个数字(0-9)!”;
返回false;
} 
re=/[a-z]/;
如果(!re.test(密码)){
警告(“密码必须至少包含一个小写字母(a-z)!”;
返回false;
} 
re=/[A-Z]/;
如果(!re.test(密码)){
警告(“密码必须至少包含一个大写字母(A-Z)!”;
返回false;
}
返回true;
}
功能验证密码(密码){
urlString=“../sql/db_verify_password.php?password=“+password;
/*发送日历更新信息并返回状态消息*/
$.ajax({
键入:“获取”,
url:urlString,
数据类型:“xml”,
成功:函数(xml){
$(xml).find('Results').each(function(){
var status=$(this.find('status').text();
如果(状态!=“确定”){
警报(状态);
返回false;
}
});
} 
});
}

让我们看看您的代码中发生了什么

你先打电话

VerifyPassword($("#CurrentPassword").val())
这导致了

$.ajax({
    //content omitted
});
现在,ajax中的第一个
a
代表异步。这意味着将请求其他资源,但您不会等到请求完成(如果等待,则称之为同步)。
相反,您的代码将继续执行,将焦点设置在输入上并返回false。 最后,当请求完成并返回时,您在
success:
中指定的函数将被执行


知道这一点后,您希望在
成功:

中指定的函数内更改焦点,您期望的是什么,实际发生的是什么?您的问题到底是什么还不清楚。您所说的“通过focus()传递”是什么意思?.focus()用于将函数绑定到focus事件。根据您的代码,看起来您并没有尝试这样做,您是否尝试设置焦点?是什么触发了此代码的执行?
onclick
事件?可能与您的异步调用有关。您激发了一个想法。我在ajax中添加了“async:false”参数,解决了这个问题。@Ernest请记住,这将在整个请求过程中阻止ui线程。在请求完成之前,用户将无法与页面交互。这可能非常令人不安!(这就是为什么我在回答中没有这样提到)我理解。因为这是页面上的一个表单,所以他们当时不会与任何其他表单交互。谢谢你的帮助。我没有太多使用StackOverflow,我是否检查您的答案是否已接受?@Ernest作为一般规则:始终接受以下答案:a)解决了您的问题和/或b)帮助您最多,如果有多个答案。如果这个答案在你的演讲中是有用的,或者是好的(好的解释等等),那么就把它也投上一票。有些情况下,如果没有答案,我就不会接受。