javascript学习笔记(十二)初始化表单,及对其简单验证
在web开发中,经常需要用户填写一些信息提交到数据库中,这个时候我们就会用到表单。对于前端来说,表单设计的好与不好直接影响到用户的体验。
以上已经达到重置表单的目的了,我们再来改善一下,当表单中的值为默认值时,我们以浅色显示,而当用户输入真实值时,以更明显的颜色来显示,主要目的是区分默认值和真实值。
在今天的学习笔记中,和大家一起来先设计一个表单,然后一步一步一类完善用户体验。
先看HTML代码:
<form method="post" action="#" name="register"> <p> <label for="user_name">用户名:</label> <input type="text" value="请输入您的用户名" name="用户名" id="user_name" class="inputs" /><span>*</span> </p> <p> <label for="email">邮 箱:</label> <input type="text" value="请输入您的邮箱" name="邮箱" id="email" class="inputs" /><span>*</span> </p> <p> <label for="mobile_phone">手机号:</label> <input type="mobile_phone" value="请输入您的手机号" name="手机号" id="mobile_phone" class="inputs" /><span>*</span> </p> <p> <label for="psw">登录密码:</label> <input type="password" value="" name="密码" id="psw" class="inputs" /><span>*</span> </p> <p> <label for="re_psw">确认密码:</label> <input type="password" value="" name="密码" id="re_psw" class="inputs" /><span>*</span> </p> <p> <input type="submit" value="注册" class="btn" /> </p> </form>
我们先来看代码中的"label"标签,当labels标签中的for属性值和input元素中的id值相同时,在前台页面中当我们点击元素的名称(文本)时,该元素就会被触发(获得焦点、选中)。这在表单元素可选区域不大的时候尤为起作用,比如单选按钮、多选按钮,供用户点击的区域并不大,如果设置了label,则用户直接点击元素的名称时,就会自动选中。所以设置label值还是很有意义的。
但是这个功能并不是所有的浏览器都支持。没有关系,我们可以用一个简单的js函数labelFocus()来实现。
function labelFocus() {
var labels = document.getElementsByTagName("label");
for (var i=0; i<labels.length; i++) {
var id = labels[i].getAttribute("for");
var element = document.getElementById(id);
element.onclick = function () {
this.focus();
}
}
}
再来看HTML代码中,每个input元素我们都定义了一个默认值,这样可以引导用户填写正确的信息。但是同样会造成一个麻烦就是用户要先把我们定义的默认值删掉,然后再去填写自己的信息。对于用户来说显然是不好的体验。这里我们可以这样改善,当该元素获得焦点时,自动消除我们定义的默认值,失去焦点时,如果用户什么都没有输入,则又还原为默认值。请看我们定义的resetFields()函数。
function resetFields() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
for (var j=0; j<forms[i].elements.length; j++) {
var element = forms[i].elements[j];
if (element.type == "submit") continue;
element.onfocus = function() {
if (this.value == this.defaultValue) {
this.value = "";
}
}
element.onblur = function() {
if (this.value == "") {
this.value = this.defaultValue;
}
}
}
}
}
请看完整代码示例1:
<!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 content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>forms elements -- by zhangchen</title>
<style type="text/css">
/*--common style--*/
* {
margin:0;
padding:0;
}
body {
font-family:'微软雅黑', verdana;
font-size:12px;
background-color:#EFFFDF;
}
.container {
width:960px;
margin:0 auto;
}
.header {
height:35px;
padding-top:30px;
background-color:#58A40D;
color:#ffffff;
}
.header h1 {
font-size:18px;
padding-left:15px;
}
.header h1 span {
float:right;
padding-right:15px;
font-size:14px;
padding-top:3px;
}
.content {
background-color:#ffffff;
padding:20px 30px;
min-height:460px;
*height:460px;
}
.footer {
margin-top:15px;
text-align:center;
}
/*--content style--*/
.content h2 {
font-size:16px;
margin-bottom:10px;
}
.content p {
padding:8px 0;
width:400px;
}
.content p span {
padding-left:8px;
color:red;
}
.content p label {
width:60px;
float:left;
text-align:right;
padding-top:3px;
}
.inputs {
height:23px;
line-height:23px;
border:1px solid #E3E9EF;
border-top:1px solid #ABADB3;
width:250px;
font-family:verdana;
}
.btn {
width:55px;
height:20px;
line-height:20px;
margin-left:60px;
border:none;
background-color:#58A40D;
color:#ffffff;
}
</style>
<script type="text/javascript">
function labelFocus() {
var labels = document.getElementsByTagName("label");
for (var i=0; i<labels.length; i++) {
var id = labels[i].getAttribute("for");
var element = document.getElementById(id);
element.onclick = function () {
this.focus();
}
}
}
function resetFields() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
for (var j=0; j<forms[i].elements.length; j++) {
var element = forms[i].elements[j];
if (element.type == "submit") continue;
element.onfocus = function() {
if (this.value == this.defaultValue) {
this.value = "";
}
}
element.onblur = function() {
if (this.value == "") {
this.value = this.defaultValue;
}
}
}
}
}
window.onload = function() {
resetFields();
labelFocus();
}
</script>
</head>
<body>
<div class="container">
<div class="header">
<h1><span>2011-04-17 by zhangchen</span>javascript学习笔记(十二) 表单操作及简单验证</h1>
</div><!--header end-->
<div class="content">
<h2>注册表单</h2>
<form method="post" action="#" name="register">
<p>
<label for="user_name">用户名:</label>
<input type="text" value="请输入您的用户名" name="用户名" id="user_name" class="inputs" /><span>*</span>
</p>
<p>
<label for="email">邮 箱:</label>
<input type="text" value="请输入您的邮箱" name="邮箱" id="email" class="inputs" /><span>*</span>
</p>
<p>
<label for="mobile_phone">手机号:</label>
<input type="mobile_phone" value="请输入您的手机号" name="手机号" id="mobile_phone" class="inputs" /><span>*</span>
</p>
<p>
<label for="psw">登录密码:</label>
<input type="password" value="" name="密码" id="psw" class="inputs" /><span>*</span>
</p>
<p>
<label for="re_psw">确认密码:</label>
<input type="password" value="" name="密码" id="re_psw" class="inputs" /><span>*</span>
</p>
<p>
<input type="submit" value="注册" class="btn" />
</p>
</form>
</div><!--content end-->
<div class="footer">
<p>专注web前端技术 by zhangchen(WH)</p>
</div>
</div><!--container end-->
</body>
</html>
请看修改后的resetForms()函数:
function resetFields() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
for (var j=0; j<forms[i].elements.length; j++) {
var element = forms[i].elements[j];
if (element.type == "submit") continue;
if (element.value == element.defaultValue) {
element.setAttribute("class", "inputs default");
}
element.onfocus = function() {
if (this.value == this.defaultValue) {
this.value = "";
this.setAttribute("class", "inputs");
}
}
element.onblur = function() {
if (this.value == "") {
this.value = this.defaultValue;
this.setAttribute("class", "inputs default");
}
}
}
}
}
实现的原理主要是通过setAttribute方法来改变元素的class值,这里我可以再增加两个函数,addClass()和removeClass(),随时给元素增加或是移除class值。
function addClass(element, value) {
var oldClassName = element.className;
if (!oldClassName) {
element.className = value;
} else {
element.className+=" "+value;
}
}
function removeClass(element, value) {
var oldClassName = element.className;
var reg = eval("/\s*"+value+"/");
if (reg.test(oldClassName)) {
element.className = oldClassName.replace(reg, "");
}
}
function resetFields() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
for (var j=0; j<forms[i].elements.length; j++) {
var element = forms[i].elements[j];
if (element.type == "submit") continue;
if (element.value == element.defaultValue) {
addClass(element, "default");
//element.setAttribute("class", "inputs default");
}
element.onfocus = function() {
if (this.value == this.defaultValue) {
this.value = "";
removeClass(this, "default");
//this.setAttribute("class", "inputs");
}
}
element.onblur = function() {
if (this.value == "") {
this.value = this.defaultValue;
addClass(this, "default");
//this.setAttribute("class", "inputs default");
}
}
}
}
}
有了addClass()和removeClass()这两个函数,我们可以很方便在任何位置使用了,比起setAttribute()函数来可读性要好。我们再来做一些改善,当文本框获取焦点时,我们让其高亮显示。
请看修改之后的resetForms()函数:
function resetFields() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
for (var j=0; j<forms[i].elements.length; j++) {
var element = forms[i].elements[j];
if (element.type == "submit") continue;
if (element.value == element.defaultValue) {
addClass(element, "default");
//element.setAttribute("class", "inputs default");
}
element.onfocus = function() {
addClass(this, "focus");
if (this.value == this.defaultValue) {
this.value = "";
removeClass(this, "default");
//this.setAttribute("class", "inputs");
}
}
element.onblur = function() {
removeClass(this, "focus");
if (this.value == "") {
this.value = this.defaultValue;
addClass(this, "default");
//this.setAttribute("class", "inputs default");
}
}
}
}
}
请看完整示例代码2:
<!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 content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>forms elements -- by zhangchen</title>
<style type="text/css">
/*--common style--*/
* {
margin:0;
padding:0;
}
body {
font-family:'微软雅黑', verdana;
font-size:12px;
background-color:#EFFFDF;
}
.container {
width:960px;
margin:0 auto;
}
.header {
height:35px;
padding-top:30px;
background-color:#58A40D;
color:#ffffff;
}
.header h1 {
font-size:18px;
padding-left:15px;
}
.header h1 span {
float:right;
padding-right:15px;
font-size:14px;
padding-top:3px;
}
.content {
background-color:#ffffff;
padding:20px 30px;
min-height:460px;
*height:460px;
}
.footer {
margin-top:15px;
text-align:center;
}
/*--content style--*/
.content h2 {
font-size:16px;
margin-bottom:10px;
}
.content p {
padding:8px 0;
width:400px;
}
.content p span {
padding-left:8px;
color:red;
}
.content p label {
width:60px;
float:left;
text-align:right;
padding-top:3px;
}
.inputs {
height:23px;
line-height:23px;
border:1px solid #E3E9EF;
border-top:1px solid #ABADB3;
width:250px;
font-family:verdana;
}
.default {
color:#9A9CA1;
}
.focus {
border:1px solid #70CF11;
}
.btn {
width:55px;
height:20px;
line-height:20px;
margin-left:60px;
border:none;
background-color:#58A40D;
color:#ffffff;
}
</style>
<script type="text/javascript">
function labelFocus() {
var labels = document.getElementsByTagName("label");
for (var i=0; i<labels.length; i++) {
var id = labels[i].getAttribute("for");
var element = document.getElementById(id);
element.onclick = function () {
this.focus();
}
}
}
function addClass(element, value) {
var oldClassName = element.className;
if (!oldClassName) {
element.className = value;
} else {
element.className+=" "+value;
}
}
function removeClass(element, value) {
var oldClassName = element.className;
var reg = eval("/\s*"+value+"/");
if (reg.test(oldClassName)) {
element.className = oldClassName.replace(reg, "");
}
}
function resetFields() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
for (var j=0; j<forms[i].elements.length; j++) {
var element = forms[i].elements[j];
if (element.type == "submit") continue;
if (element.value == element.defaultValue) {
addClass(element, "default");
//element.setAttribute("class", "inputs default");
}
element.onfocus = function() {
addClass(this, "focus");
if (this.value == this.defaultValue) {
this.value = "";
removeClass(this, "default");
//this.setAttribute("class", "inputs");
}
}
element.onblur = function() {
removeClass(this, "focus");
if (this.value == "") {
this.value = this.defaultValue;
addClass(this, "default");
//this.setAttribute("class", "inputs default");
}
}
}
}
}
window.onload = function() {
resetFields();
labelFocus();
}
</script>
</head>
<body>
<div class="container">
<div class="header">
<h1><span>2011-04-17 by zhangchen</span>javascript学习笔记(十二) 表单操作及简单验证</h1>
</div><!--header end-->
<div class="content">
<h2>注册表单</h2>
<form method="post" action="#" name="register">
<p>
<label for="user_name">用户名:</label>
<input type="text" value="请输入您的用户名" name="用户名" id="user_name" class="inputs" /><span>*</span>
</p>
<p>
<label for="email">邮 箱:</label>
<input type="text" value="请输入您的邮箱" name="邮箱" id="email" class="inputs" /><span>*</span>
</p>
<p>
<label for="mobile_phone">手机号:</label>
<input type="mobile_phone" value="请输入您的手机号" name="手机号" id="mobile_phone" class="inputs" /><span>*</span>
</p>
<p>
<label for="psw">登录密码:</label>
<input type="password" value="" name="密码" id="psw" class="inputs" /><span>*</span>
</p>
<p>
<label for="re_psw">确认密码:</label>
<input type="password" value="" name="密码" id="re_psw" class="inputs" /><span>*</span>
</p>
<p>
<input type="submit" value="注册" class="btn" />
</p>
</form>
</div><!--content end-->
<div class="footer">
<p>专注web前端技术 by zhangchen(WH)</p>
</div>
</div><!--container end-->
</body>
</html>
以上我们已经完成了表单的初始化工作,现在我们对表单进行简单的验证,验证之前我们的html代码有部分改变,主要是input中class的值,当为必填字段时,class中添加"required"值,当还要进一步验证eamil或是手机号号时,我们需要在class中添加相应的"email"、"mobile_phone"值,请看修改后的html代码:
<form method="post" action="#" name="register"> <p> <label for="user_name">用户名:</label> <input type="text" value="请输入您的用户名" name="用户名" id="user_name" class="inputs required" /><span>*</span> </p> <p> <label for="email">邮 箱:</label> <input type="text" value="请输入您的邮箱" name="邮箱" id="email" class="inputs required email" /><span>*</span> </p> <p> <label for="mobile_phone">手机号:</label> <input type="mobile_phone" value="请输入您的手机号" name="手机号" id="mobile_phone" class="inputs required mobile" /><span>*</span> </p> <p> <label for="psw">登录密码:</label> <input type="password" value="" name="密码" id="psw" class="inputs required" /><span>*</span> </p> <p> <label for="re_psw">确认密码:</label> <input type="password" value="" name="密码" id="re_psw" class="inputs required" /><span>*</span> </p> <p> <input type="submit" value="注册" class="btn" onclick="return validateForms()" /> </p> </form>
下面我们来看验证函数validaeForms()函数,当文本框的数据不正确时,首先让该元素取得焦点,同时该文本框变为红色,引起用户的注意。
请看完整示例代码3:
<!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 content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>forms elements -- by zhangchen</title>
<style type="text/css">
/*--common style--*/
* {
margin:0;
padding:0;
}
body {
font-family:'微软雅黑', verdana;
font-size:12px;
background-color:#EFFFDF;
}
.container {
width:960px;
margin:0 auto;
}
.header {
height:35px;
padding-top:30px;
background-color:#58A40D;
color:#ffffff;
}
.header h1 {
font-size:18px;
padding-left:15px;
}
.header h1 span {
float:right;
padding-right:15px;
font-size:14px;
padding-top:3px;
}
.content {
background-color:#ffffff;
padding:20px 30px;
min-height:460px;
*height:460px;
}
.footer {
margin-top:15px;
text-align:center;
}
/*--content style--*/
.content h2 {
font-size:16px;
margin-bottom:10px;
}
.content p {
padding:8px 0;
width:400px;
}
.content p span {
padding-left:8px;
color:red;
}
.content p label {
width:60px;
float:left;
text-align:right;
padding-top:3px;
}
.inputs {
height:23px;
line-height:23px;
border:1px solid #E3E9EF;
border-top:1px solid #ABADB3;
width:250px;
font-family:verdana;
}
.default {
color:#9A9CA1;
}
.focus {
border:1px solid #70CF11;
}
.error {
border:1px solid red;
}
.btn {
width:55px;
height:20px;
line-height:20px;
margin-left:60px;
border:none;
background-color:#58A40D;
color:#ffffff;
}
</style>
<script type="text/javascript">
function labelFocus() {
var labels = document.getElementsByTagName("label");
for (var i=0; i<labels.length; i++) {
var id = labels[i].getAttribute("for");
var element = document.getElementById(id);
element.onclick = function () {
this.focus();
}
}
}
function addClass(element, value) {
var oldClassName = element.className;
if (!oldClassName) {
element.className = value;
} else {
element.className+=" "+value;
}
}
function removeClass(element, value) {
var oldClassName = element.className;
var reg = eval("/\s*"+value+"/");
if (reg.test(oldClassName)) {
element.className = oldClassName.replace(reg, "");
}
}
function resetFields() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
for (var j=0; j<forms[i].elements.length; j++) {
var element = forms[i].elements[j];
if (element.type == "submit") continue;
if (element.value == element.defaultValue) {
addClass(element, "default");
//element.setAttribute("class", "inputs default");
}
element.onfocus = function() {
addClass(this, "focus");
if (this.value == this.defaultValue) {
this.value = "";
removeClass(this, "default");
//this.setAttribute("class", "inputs");
}
}
element.onblur = function() {
removeClass(this, "focus");
if (this.value == "") {
this.value = this.defaultValue;
addClass(this, "default");
//this.setAttribute("class", "inputs default");
} else {
if (this.className.indexOf("error")) {
removeClass(this, "error");
}
}
}
}
}
}
function validateForms() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
for (var j=0; j<forms[i].elements.length; j++) {
var element = forms[i].elements[j];
if (element.className.indexOf("required") != -1) {
if (!isFilled(element)) {
alert("请输入您的"+element.name);
element.focus();
addClass(element, "error");
return false;
}
}
if (element.className.indexOf("mobile") != -1) {
if (!isMobile(element)) {
alert("您输入的手机号格式不正确!");
element.focus();
addClass(element, "error");
return false;
}
}
if (element.className.indexOf("email") != -1) {
if (!isEmail(element)) {
alert("您输入的邮箱格式不正确");
element.focus();
addClass(element, "error");
return false;
}
}
}
}
var psw = document.getElementById("psw");
var re_psw = document.getElementById("re_psw");
if (re_psw.value != psw.value) {
alert("两次输入的密码不一致");
re_psw.focus();
addClass(re_psw, "error");
return false;
}
}
function isFilled(field) {
if (field.value == "" || field.value == field.defaultValue) {
return false;
} else {
return true;
}
}
function isMobile(field) {
var reg = /^(13[0-9]|186|188|150|151|158|159|147)\d{8}$/;
if (reg.test(field.value)) {
return true;
} else {
return false;
}
}
function isEmail(field) {
var reg = /^[a-zA-Z0-9](\w)+@(\w)+(\.)+(com|com\.cn|net|cn|net\.cn|org|biz|info|gov|gov\.cn|edu|edu\.cn)$/;
if (reg.test(field.value)) {
return true;
} else {
return false;
}
}
window.onload = function() {
resetFields();
labelFocus();
}
</script>
</head>
<body>
<div class="container">
<div class="header">
<h1><span>2011-04-17 by zhangchen</span>javascript学习笔记(十二) 表单操作及简单验证</h1>
</div><!--header end-->
<div class="content">
<h2>注册表单</h2>
<form method="post" action="#" name="register">
<p>
<label for="user_name">用户名:</label>
<input type="text" value="请输入您的用户名" name="用户名" id="user_name" class="inputs required" /><span>*</span>
</p>
<p>
<label for="email">邮 箱:</label>
<input type="text" value="请输入您的邮箱" name="邮箱" id="email" class="inputs required email" /><span>*</span>
</p>
<p>
<label for="mobile_phone">手机号:</label>
<input type="mobile_phone" value="请输入您的手机号" name="手机号" id="mobile_phone" class="inputs required mobile" /><span>*</span>
</p>
<p>
<label for="psw">登录密码:</label>
<input type="password" value="" name="密码" id="psw" class="inputs required" /><span>*</span>
</p>
<p>
<label for="re_psw">确认密码:</label>
<input type="password" value="" name="密码" id="re_psw" class="inputs required" /><span>*</span>
</p>
<p>
<input type="submit" value="注册" class="btn" onclick="return validateForms()" />
</p>
</form>
</div><!--content end-->
<div class="footer">
<p>专注web前端技术 by zhangchen(WH)</p>
</div>
</div><!--container end-->
</body>
</html>
表单已经看起来不错了,但是我们在html代码中,我们在提交按钮中添加了onclick动作。我们可以分离出去,让html代码更加干净!
请看完整的代码示例:
<!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 content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>forms elements -- by zhangchen</title>
<style type="text/css">
/*--common style--*/
* {
margin:0;
padding:0;
}
body {
font-family:'微软雅黑', verdana;
font-size:12px;
background-color:#EFFFDF;
}
.container {
width:960px;
margin:0 auto;
}
.header {
height:35px;
padding-top:30px;
background-color:#58A40D;
color:#ffffff;
}
.header h1 {
font-size:18px;
padding-left:15px;
}
.header h1 span {
float:right;
padding-right:15px;
font-size:14px;
padding-top:3px;
}
.content {
background-color:#ffffff;
padding:20px 30px;
min-height:460px;
*height:460px;
}
.footer {
margin-top:15px;
text-align:center;
}
/*--content style--*/
.content h2 {
font-size:16px;
margin-bottom:10px;
}
.content p {
padding:8px 0;
width:400px;
}
.content p span {
padding-left:8px;
color:red;
}
.content p label {
width:60px;
float:left;
text-align:right;
padding-top:3px;
}
.inputs {
height:23px;
line-height:23px;
border:1px solid #E3E9EF;
border-top:1px solid #ABADB3;
width:250px;
font-family:verdana;
}
.default {
color:#9A9CA1;
}
.focus {
border:1px solid #70CF11;
}
.error {
border:1px solid red;
}
.btn {
width:55px;
height:20px;
line-height:20px;
margin-left:60px;
border:none;
background-color:#58A40D;
color:#ffffff;
}
</style>
<script type="text/javascript">
function labelFocus() {
var labels = document.getElementsByTagName("label");
for (var i=0; i<labels.length; i++) {
var id = labels[i].getAttribute("for");
var element = document.getElementById(id);
element.onclick = function () {
this.focus();
}
}
}
function addClass(element, value) {
var oldClassName = element.className;
if (!oldClassName) {
element.className = value;
} else {
element.className+=" "+value;
}
}
function removeClass(element, value) {
var oldClassName = element.className;
var reg = eval("/\s*"+value+"/");
if (reg.test(oldClassName)) {
element.className = oldClassName.replace(reg, "");
}
}
function resetFields(currentForm) {
for (var i=0; i<currentForm.elements.length; i++) {
var element = currentForm.elements[i];
if (element.type == "submit") continue;
if (element.value == element.defaultValue) {
addClass(element, "default");
//element.setAttribute("class", "inputs default");
}
element.onfocus = function() {
addClass(this, "focus");
if (this.value == this.defaultValue) {
this.value = "";
//this.setAttribute("class", "inputs focus");
removeClass(this, "default");
}
}
element.onblur = function() {
removeClass(this, "focus");
if (this.value == "") {
this.value = this.defaultValue;
//this.setAttribute("class", "inputs default");
addClass(this, "default");
} else {
if (this.className.indexOf("error")) {
removeClass(this, "error");
}
}
}
}
}
//有return的话,会根据check的返回值来控制,是否执行submit操作
//而没有return的话,无论check返回值如何,都会执行submit操作
function validateForms(currentForm) {
for (var i=0; i<currentForm.elements.length; i++) {
var element = currentForm.elements[i];
if (element.className.indexOf("required") != -1) {
if (!isFilled(element)) {
alert("请输入您的"+element.name);
element.focus();
addClass(element, "error");
return false;
}
}
if (element.className.indexOf("mobile") != -1) {
if (!isMobile(element)) {
alert("您输入的手机号格式不正确!");
element.focus();
addClass(element, "error");
return false;
}
}
if (element.className.indexOf("email") != -1) {
if (!isEmail(element)) {
alert("您输入的邮箱格式不正确");
element.focus();
addClass(element, "error");
return false;
}
}
}
var psw = document.getElementById("psw");
var re_psw = document.getElementById("re_psw");
if (re_psw.value != psw.value) {
alert("两次输入的密码不一致");
re_psw.focus();
addClass(re_psw, "error");
return false;
}
}
function isFilled(field) {
if (field.value == "" || field.value == field.defaultValue) {
return false;
} else {
return true;
}
}
function isMobile(field) {
var reg = /^(13[0-9]|186|188|150|151|158|159|147)\d{8}$/;
if (reg.test(field.value)) {
return true;
} else {
return false;
}
}
function isEmail(field) {
var reg = /^[a-zA-Z0-9](\w)+@(\w)+(\.)+(com|com\.cn|net|cn|net\.cn|org|biz|info|gov|gov\.cn|edu|edu\.cn)$/;
if (reg.test(field.value)) {
return true;
} else {
return false;
}
}
function prepareForms() {
var forms = document.forms;
for (var i=0; i<forms.length; i++) {
currentForm = forms[i];
resetFields(currentForm);
currentForm.onsubmit = function() {
return validateForms(this);
}
}
}
window.onload = function() {
prepareForms();
labelFocus();
}
</script>
</head>
<body>
<div class="container">
<div class="header">
<h1><span>2011-04-17 by zhangchen</span>javascript学习笔记(十二) 表单操作及简单验证</h1>
</div><!--header end-->
<div class="content">
<h2>注册表单</h2>
<form method="post" action="#" name="register">
<p>
<label for="user_name">用户名:</label>
<input type="text" value="请输入您的用户名" name="用户名" id="user_name" class="inputs required" /><span>*</span>
</p>
<p>
<label for="email">邮 箱:</label>
<input type="text" value="请输入您的邮箱" name="邮箱" id="email" class="inputs required email" /><span>*</span>
</p>
<p>
<label for="mobile_phone">手机号:</label>
<input type="mobile_phone" value="请输入您的手机号" name="手机号" id="mobile_phone" class="inputs required mobile" /><span>*</span>
</p>
<p>
<label for="psw">登录密码:</label>
<input type="password" value="" name="密码" id="psw" class="inputs required" /><span>*</span>
</p>
<p>
<label for="re_psw">确认密码:</label>
<input type="password" value="" name="密码" id="re_psw" class="inputs required" /><span>*</span>
</p>
<p>
<input type="submit" value="注册" class="btn" onclick="return validateForms()" />
</p>
</form>
</div><!--content end-->
<div class="footer">
<p>专注web前端技术 by zhangchen(WH)</p>
</div>
</div><!--container end-->
</body>
</html>

浙公网安备 33010602011771号