只是坚持尝试让表单验证工作。在你说什么之前,我正在使用jquery将文件拉取到div中,因此css文件在索引中.php(此处无关(。
所以我试图在这里获得一些表单验证,因为我仍在为大学学习,我很困惑这里的脚本验证表单出了什么问题。
哦,只是一个饼干问题...当有人提交表单但抛出内容保留在字段中的错误时,是否有可能?或者我不能,因为我使用 JS 提交表单数据?
感谢任何回复:)
<html>
<head>
<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
<script language="javascript" type="text/javascript">
function validateForm(form){
var user=form.username.value;
var email = form.email.value;
var str=form.password.value;
var cstr=form.cpassword.value;
var err={};
var validemail =/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+'.[a-zA-Z]{2,4}$/;
//check required fields
//checks username
if((user.length < 3) || (user.length > 15)){
err.message="username must be between 3 and 15 characters.";
err.field=form.username;
}
//password should be minimum 4 chars but not greater than 8
if ((str.length < 4) || (str.length > 8)) {
err.message="Invalid password length";
err.field=form.password;
}
//check if repeated password matches
if(cstr!=str)
{
err.message="Passwords do not match";
err.field.form.cpassword;
}
//validate email
if(!(validemail.test(email))){
err.message="Invalid email";
err.field=form.email;
}
if(err.message)
{
document.getElementById('results').innerHTML = err.message;
err.field.focus();
return false;
}
return true
}
</script>
</head>
<body>
<div id="content" class="content">
<div class="content-heading">
<div class="content-heading-title">
<h3>Register now!</h3>
</div>
</div>
<div class="content-info">
<form id="myForm" method="post" onsubmit="return validateForm(this);">
Username: <input name="username" id="username" type="text" /><br />
Email: <input name="email" id="email" type="text" /><br />
Password: <input name="password" id="password" type="password" /><br />
Confirm Password:<input name="cpassword" id="cpassword" type="password" /><br />
<input type="button" id="submitFormData" onclick="SubmitFormData();" value="Submit" />
</form>
<div id="results"></div>
</div>
</div>
<script>
function SubmitFormData() {
var username = $("#username").val();
var email = $("#email").val();
var pass = $("#password").val();
var cpass = $("#cpassword").val();
$.post("submit.php", {
username: username,
email: email,
pass: pass,
cpass: cpass
}, function(data) {
$('#results').html(data);
$('#myForm').trigger('reset');
});
}
</script>
</body>
</html>
<html>
<head>
<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
</head>
<body>
<div id="content" class="content">
<div class="content-heading">
<div class="content-heading-title">
<h3>Register now!</h3>
</div>
</div>
<div class="content-info">
<form id="myForm" method="post">
Username: <input name="username" id="username" type="text" /><br />
Email: <input name="email" id="email" type="text" /><br />
Password: <input name="password" id="password" type="password" /><br />
Confirm Password:<input name="cpassword" id="cpassword" type="password" /><br />
<input type="button" id="submitFormData" onclick="SubmitFormData();" value="Submit" />
</form>
<div id="results"></div>
</div>
</div>
<script>
function SubmitFormData() {
var username = $("#username").val();
var email = $("#email").val();
var pass = $("#password").val();
var cpass = $("#cpassword").val();
var validemail = /^(['w-'.]+@(['w-]+'.)+['w-]{2,4})?$/;
if((username.length < 3) || (username.length > 15)) { //Useranme should be minimum 3 chars but not greater than 15
var message = "username must be between 3 and 15 characters.";
$('#results').html(message);
$("#username").focus();
return false;
} else if ((pass.length < 4) || (pass.length > 8)) { //password should be minimum 4 chars but not greater than 8
var message = "Invalid password length";
$('#results').html(message);
$("#password").focus();
return false;
} else if(cpass != pass) { //check if repeated password matches
var message = "Passwords do not match";
$('#results').html(message);
$("#cpassword").focus();
return false;
} else if(email == "") { //check if email address enterd
var message = "Enter Email address";
$('#results').html(message);
$("#email").focus();
return false;
} else if(!validemail.test(email)){ //validate email
var message = "Invalid email";
$('#results').html(message);
$("#email").focus();
return false;
} else { // Then POST the Form
$('#results').html("Sending Registration");
$.post("submit.php", {
username: username,
email: email,
pass: pass,
cpass: cpass
}, function(data) {
$('#results').html(data);
$('#myForm').trigger('reset');
});
}
}
</script>
</body>
</html>
删除表单上的onsubmit并删除验证功能,并将所有验证放在SubmitFormData((函数中,如上面的代码一样
删除表单上的onsubmit,并从SubmitFormData调用validateForm。
你应该这样做:
function validateForm(){
var username = $("#username").val();
var email = $("#email").val();
var pass = $("#password").val();
var cpass = $("#cpassword").val();
var err={
message: "",
field: ""
};
var validemail =/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+'.[a-zA-Z]{2,4}$/;
//check required fields
//checks username
if(username.length < 3 || username.length > 15){
err.message="username must be between 3 and 15 characters.";
err.field="username";
}
//password should be minimum 4 chars but not greater than 8
if (pass.length < 4 || pass.length > 8) {
err.message="Invalid password length";
err.field="password";
}
//check if repeated password matches
if(cpass!=pass)
{
err.message="Passwords do not match";
err.field="cpassword";
}
//validate email
if(!validemail.test(email)){
err.message="Invalid email";
err.field="email";
}
if(err.message != "")
{
$("#results").html(err.message);
$("#"+err.field).focus();
return false;
}
$("#results").html(""); // to clean results div in the case of previous error message
return true;
}
function SubmitFormData() {
if(validateForm()) {
var username = $("#username").val();
var email = $("#email").val();
var pass = $("#password").val();
var cpass = $("#cpassword").val();
$.post("submit.php", {
username: username,
email: email,
pass: pass,
cpass: cpass
}, function(data) {
$('#results').html(data);
$('#myForm').trigger('reset');
});
}
}
有很多事情需要解释和缺陷。但是我从您的代码中扩展了一点修改。剩下的你可以理解和学习。更改如下:
<html>
<head>
<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
<script language="javascript" type="text/javascript">
function validateForm(form){
var user=form.username.value;
var email = form.email.value;
var str=form.password.value;
var cstr=form.cpassword.value;
var err={};
var validemail =/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+'.[a-zA-Z]{2,4}$/;
//check required fields
//checks username
if((user.length < 3) || (user.length > 15)){
err.message = "username must be between 3 and 15 characters.<br><br>";
err.field=form.username;
}
//password should be minimum 4 chars but not greater than 8
if ((str.length < 4) || (str.length > 8)) {
err.message += "Invalid password length.<br><br>";
err.field=form.password;
}
//check if repeated password matches
if(cstr!=str)
{
err.message += "Passwords do not match.<br><br>";
err.field.form.cpassword;
}
//validate email
if(!(validemail.test(email))){
err.message += "Invalid email.<br><br>";
err.field=form.email;
}
if(err.message)
{
document.getElementById('results').innerHTML = err.message;
err.field.focus();
return false;
} else {
SubmitFormData();
return false;
}
}
</script>
</head>
<body>
<div id="content" class="content">
<div class="content-heading">
<div class="content-heading-title">
<h3>Register now!</h3>
</div>
</div>
<div class="content-info">
<form id="myForm" method="post" onsubmit="return validateForm(this);">
Username: <input name="username" id="username" type="text" /><br />
Email: <input name="email" id="email" type="text" /><br />
Password: <input name="password" id="password" type="password" /><br />
Confirm Password:<input name="cpassword" id="cpassword" type="password" /><br />
<input type="submit" id="submitFormData" value="Submit" />
</form>
<div id="results"></div>
</div>
</div>
<script>
function SubmitFormData() {
var username = $("#username").val();
var email = $("#email").val();
var pass = $("#password").val();
var cpass = $("#cpassword").val();
$.post("submit.php", {
username: username,
email: email,
pass: pass,
cpass: cpass
}, function(data) {
$('#results').html(data);
$('#myForm').trigger('reset');
});
}
</script>
</body>
</html>