2012-03-20 91 views
0

我正在创建一个注册表单,并且我想检查用户是否在输入密码的同时给他发送相应的消息。到目前为止一切正常,除了这些东西:当两个字段都为空时,检查密码是否匹配会返回“密码匹配”

  • 当用户从确认密码字段删除一切仍 给他发个消息“密码不匹配”,而我想给他 没有消息或消息说“请确认密码”。
  • 当 用户从两个字段中删除所有内容时,它会给他一条消息 “密码匹配”,而它根本不应该给他任何消息。

这里是我的代码:

$(function() { 
    $("#txtNewPassword").keyup(checkPasswordMatch); 
    $("#txtConfirmPassword").keyup(checkPasswordMatch); 
}); 


function checkPasswordMatch() { 
    $("#divCheckPasswordMatch").html(""); 
    var password = $("#txtNewPassword").val(); 
    var confirmPassword = $("#txtConfirmPassword").val(); 

    if (password == "" && confirmPassword == ""){ 
     $("#divCheckPasswordMatch").html(""); 
     $("#divIsPasswordExist").html(""); 
    } 
    else if (password != "" && confirmPassword == "") { 
     $("#divCheckPasswordMatch").html(""); 
    } 

    else if (password == "" && confirmPassword != "") 
     $("#divIsPasswordExist").html("Password cannot be empty!"); 
    else 
     $("#divIsPasswordExist").html(""); 


    if (password != confirmPassword) 
    { 
     $("#divCheckPasswordMatch").removeClass("registrationFormConfirm"); 
     $("#divCheckPasswordMatch").addClass("registrationFormAlert"); 
     $("#divCheckPasswordMatch").html("Passwords do not match!"); 
    } 
    else 
    { 
     $("#divCheckPasswordMatch").removeClass("registrationFormAlert"); 
     $("#divCheckPasswordMatch").addClass("registrationFormConfirm"); 
     $("#divCheckPasswordMatch").html("Passwords match."); 
    } 
} 

任何想法,请? 谢谢!

+0

我想'return'帮助你很多关于给予适当的消息,并从特定的地方,而不是执行整个代码返回。 – 2012-03-20 11:34:16

+0

与问题没有直接关系,但您可能有兴趣检测HTML5 ['onInput'](http://mathiasbynens.be/notes/oninput)事件而不是'onKeyUp'。 – 2012-03-20 12:05:11

回答

1
...... 
     if (password == "" && confirmPassword == ""){ 
      $("#divCheckPasswordMatch").html(""); 
      $("#divIsPasswordExist").html("Password and Confirm Password dosen't exists"); 
      return; 
     } 
     else if (password != "" && confirmPassword == "") { 
      $("#divCheckPasswordMatch").html("Confirm Password dosent't exists"); 
      return; 
     } 
     else if (password == "" && confirmPassword != ""){ 
      $("#divIsPasswordExist").html("Password cannot be empty!"); 
      return; 
     } 
     else{ 
      $("#divIsPasswordExist").html(""); 
     } 
     if (password != confirmPassword) 
     { 
      $("#divCheckPasswordMatch").removeClass("registrationFormConfirm"); 
      $("#divCheckPasswordMatch").addClass("registrationFormAlert"); 
      $("#divCheckPasswordMatch").html("Passwords do not match!"); 
     } 
     else 
     { 
      $("#divCheckPasswordMatch").removeClass("registrationFormAlert"); 
      $("#divCheckPasswordMatch").addClass("registrationFormConfirm"); 
      $("#divCheckPasswordMatch").html("Passwords match."); 
     } 
......... 
+0

谢谢!工作很棒! – Igal 2012-03-20 13:04:37

2

这是因为if (password != confirmPassword)是错误的,因为无论如何都是空的,当你设置var password = $("#txtNewPassword").val();var confirmPassword = $("#txtConfirmPassword").val();这两者都相互相等。在检查值是否为空时,应该添加一个返回值,这样当用户删除文本时,它不会检查第一个检查语句下面的任何内容。

//首先检查

if (password == "" && confirmPassword == ""){ 
return false; 
} 

...代码

1
if (password == "" && confirmPassword == ""){ 
    return false; 
} 
    .... 
    .... 

if(confirmPassword != "") 
    $("#txtConfirmPassword").html("Please confirm password"); 

     if (password != confirmPassword) 
     { 
      $("#divCheckPasswordMatch").removeClass("registrationFormConfirm"); 
      $("#divCheckPasswordMatch").addClass("registrationFormAlert"); 
      $("#divCheckPasswordMatch").html("Passwords do not match!"); 
     } 
     else 
     { 
      $("#divCheckPasswordMatch").removeClass("registrationFormAlert"); 
      $("#divCheckPasswordMatch").addClass("registrationFormConfirm"); 
      $("#divCheckPasswordMatch").html("Passwords match."); 
     } 

... 
... 
1

有一个更优雅的方式来做到这一点休息。改变你的条件,这

if(password.length > 0 && confirmPassword.length >0) { 
    if(password == confirmPassword) { 
     //confirmed 
    } else { 
     // not confirm 
    } 

} else { 
    //not entered 
}