2012-03-20 4 views
0

Я делаю регистрационную форму, и я хочу проверить, имеет ли пользователь соответствующие пароли во время ввода и дает ему соответствующее сообщение. До сих пор все работает, для этих вещей, за исключением:Проверка совпадения паролей «совпадение паролей», когда оба поля пустые

  • Когда пользователь удаляет все из Confirm поля пароля все еще дает ему сообщение «Пароли не совпадают», а я хочу, чтобы дать ему никакого сообщения или сообщение говоря «Пожалуйста, подтвердите пароль».
  • Когда пользователь удаляет все из обоих полей, он дает ему сообщение «Совпадения паролей», в то время как он не должен давать ему никакого сообщения.

Вот мой код:

$(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' помогает вам сделать правильное сообщение и вернуться из этого конкретного места, а не выполнять весь код. –

+0

Непосредственно связан с вопросом, но вам может быть интересно обнаружить событие HTML5 ['onInput'] (http://mathiasbynens.be/notes/oninput) вместо' onKeyUp'. –

ответ

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

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 
} 
Смежные вопросы