2012-03-03 3 views
0

Я создаю форму создания учетной записи и использую javascript для ее проверки. Я надеялся, что смогу помочь в ее исправлении и оптимизации. Он возвращает неверные предупреждения и имеет некоторые другие проблемы. Любые улучшения приветствуются, и я ценю любые советы, которые я получаю. БлагодаряПроверка формы Javascript для учетной записи пользователя

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Create an Accoount</title> 
<script type="text/javascript"> 
function validateform() { 
    //vars 
    var username = document.forms["usercreate"]["username"].value; 
    var email = document.forms["usercreate"]["email"].value; 
    var pass1 = document.forms["usercreate"]["pass1"].value; 
    var pass2 = document.forms["usercreate"]["pass2"].value; 

    //null check 
    if(username = "") { 
     alert ("You forgot the user name"); 
     return false; 
    } 
    if(email = "") { 
     alert ("You forgot the email address"); 
     return false; 
    } 
    if(pass1 = "") { 
     alert ("You forgot a password address"); 
     return false; 
    } 
    if(pass2 = "") { 
     alert ("You forgot a password address"); 
     return false; 
    } 

    if (username.length < 3 || username.length > 15) { 
     alert("User name is too short (under 3) or too big (over 15)"); 
     return false; 
    } 
    if (pass1 != pass2) { 
     alert ("Passwords don't match"); 
     return false; 
    } 
    if (pass1.length < 4) { 
     alert ("Your is password is too short (under 4)"); 
     return false; 
    } 
    //email check 
    var atpos=email.indexOf("@"); 
    var dotpos=email.lastIndexOf("."); 
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length) { 
     alert("Not a valid e-mail address"); 
     return false; 
    } 
} 
</script> 
</head> 

<body> 
<h1>Account Creation</h1> 
<form name="usercreate" action="usercreate.php" method="post" onsubmit="return validateform();"> 
<p><label for="username">Pick a user name (must be at least three letters characters)<br /> 
<input type="text" name="username" value="username"/><br /> 
<label for="email">Enter your email address:<br /> 
<input type="text" name="email" value="email"/><br /> <!-- check this --> 
<label for="pass1">Create a password: <br /> 
<input type="password" name="pass1" /><br /> 
<label for="pass2">Retype the password:<br /> 
<input type="password" name="pass2" /><br /> 
<input type="submit" value="Create Account"/><br /> 
</form> 
</p></body> 
</html> 

ответ

1

Большая проблема в том, что вы использовали оператор присваивания = вместо оператора сравнения === (или ==):

if(username = "") { 

// should be 

if (username === "") { 

// (and similar for the other fields) 

, как вы были это вы были на самом деле меняющегосяusername - пустая строка, а затем тест if оценивал результат этого выражения, которое как пустая строка является «ложным», поэтому соответствующее предупреждение никогда не будет показано.

+0

спасибо, что такая простая ошибка, но я никогда бы не подумал об этом. Тем не менее, спасибо очень. – cosmc

0

Попробуйте this

function validateform() { 
//vars 
var username = document.forms["usercreate"]["username"].value; 
var email = document.forms["usercreate"]["email"].value; 
var pass1 = document.forms["usercreate"]["pass1"].value; 
var pass2 = document.forms["usercreate"]["pass2"].value; 
var isFilled=true; 
var msg=""; 
//null check 
if(username == "") { 
    msg+="You forgot the user name\n"; 
    isFilled=false; 
} 
if(email == "") { 
    msg+="You forgot the email address\n"; 
    isFilled=false; 
} 
if(pass1 == "") { 
    msg+="You forgot a password address\n"; 
    isFilled=false; 
} 
//if(pass2 == "") { 
    //msg+="You forgot a password address\n"; 
    //isFilled=false; 
//} 

if (username.length < 3 || username.length > 15) { 
    msg+="User name is too short (under 3) or too big (over 15)\n"; 
    isFilled=false; 
} 
if (pass1 != pass2) { 
    msg+="Passwords don't match\n"; 
    isFilled=false; 
} 
if (pass1.length < 4) { 
    msg+="Your is password is too short (under 4)\n"; 
    isFilled=false; 
} 
//email check 
var atpos=email.indexOf("@"); 
var dotpos=email.lastIndexOf("."); 
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length) { 
    msg+="Not a valid e-mail address\n"; 
    isFilled=false; 
} 
if(!isFilled) { 
    alert(msg); 
} 
return isFilled; 

}​ 
+0

спасибо, я внесу эти изменения в свой скрипт. – cosmc

+0

Приятно объединить сообщения в одно предупреждение - вы можете сделать это немного короче, удалив переменную 'isFilled', а в конце просто верните msg ===" ";'. – nnnnnn

+0

Спасибо, и я ценю ваш совет. :-) Не считаете ли вы, что важно вернуть true/false, чтобы убедиться, что оно должно быть отправлено или нет, в зависимости от возвращаемого значения функции validateform, потому что в форме это onclick = "return validateform()" ; –