建立必须填写的字段
在填写表单时,编码人员希望指定用户必须填写某些字段,然后才能提交表单,可以使用jS代码来检查某些或者所有字段是否已经填写了。
页面的html代码
<!DOCTYPE html>
<html>
<head>
<title>Password Check</title>
<link rel="stylesheet" href="根据其他字段对字段进行检查.css">
</head>
<body>
<form action="#" >
<p> <label for="userName">Your name:<input type="text" size="30" id="userName" class="reqd"></label></p>
<p> <label for="passWd1">Chooose a password:<input type="password" id="passWd1" class="reqd"></label></p>
<p> <label for="passWd2">Verify password:<input type="password" id="passWd2" class="reqd passwd1"></label></p>
<p><input type="submit" value="Submit"> <input type="reset"></p>
</form>
<script src="根据其他字段对字段进行检查.js"></script>
</body>
</html>
页面的CSS代码
body{
color:#000;
background-color:#fff;
}
input.invalid{
background-color:#ff9;
border:2px red inset;
}
label.invalid{
color:#f00;
font-weight:bold;
}
此次对label 标签和input 标签定义两个无效的类选择器,即表示标签输入出错时,就选用无效的选择器来处理,以提示用户必须输入。
页面的JS代码
window.onload = initForms;
/* 遍历查找页面的所有的form表单*/
function initForms(){
for(var i=0;i<document.forms.length;i++)
{
document.forms[i].onsubmit=validForm;
}
}
/*查找系统中所有的input标签并对标签进行进一步处理*/
function validForm()
{
var allGood=true;
var allTags=document.getElementsByTagName("input");
for(var i=0;i<allTags.length;i++)
{
if(!validTag(allTags[i],allGood))
{
allGood=false;
}
}
return allGood;
}
/*处理相应标签中的类选择器*/
function validTag(thisTag,allGood)
{
var outClass="";
var allClasses=thisTag.className.split(" ");
for(var j=0;j<allClasses.length;j++)
{
outClass+=validBasedOnClass(allClasses[j],thisTag,allGood)+" ";
}
thisTag.className=outClass;
if(outClass.indexOf("invalid") >-1)
{
thisTag.focus();
if(thisTag.nodeName == "INPUT")
{
thisTag.select();
}
return false;
}
return true;
}
function validBasedOnClass(thisClass,thisTag,allGood)
{
var classBack="";
switch(thisClass)
{
case "":
case "invalid":
break;
case "reqd":
if(allGood && thisTag.value =="")
{
classBack="invalid ";
}
classBack +=thisClass;
break;
default:
classBack +=thisClass;
}
return classBack;
}
可以看到,这是动态给标签添加类选择器,然后在渲染界面的同时,重新使用选择器加载。
根据其他字段对字段进行检查
比如:要求用户输入密码时,为了确保用户输入密码正确,使得用户输入两次密码,并且确保两次输入完全相同。
还是使用上述html代码和css代码,加入几行js 代码即满足需求。
window.onload = initForms;
/* 遍历查找页面的所有的form表单*/
function initForms(){
for(var i=0;i<document.forms.length;i++)
{
document.forms[i].onsubmit=validForm;
}
}
/*查找系统中所有的input标签并对标签进行进一步处理*/
function validForm()
{
var allGood=true;
var allTags=document.getElementsByTagName("input");
for(var i=0;i<allTags.length;i++)
{
if(!validTag(allTags[i],allGood))
{
allGood=false;
}
}
return allGood;
}
/*处理相应标签中的类选择器*/
function validTag(thisTag,allGood)
{
var outClass="";
var allClasses=thisTag.className.split(" ");
for(var j=0;j<allClasses.length;j++)
{
outClass+=validBasedOnClass(allClasses[j],thisTag,allGood)+" ";
}
thisTag.className=outClass;
if(outClass.indexOf("invalid") >-1)
{
thisTag.focus();
if(thisTag.nodeName == "INPUT")
{
thisTag.select();
}
return false;
}
return true;
}
function validBasedOnClass(thisClass,thisTag,allGood)
{
var classBack="";
switch(thisClass)
{
case "":
case "invalid":
break;
case "reqd":
if(allGood && thisTag.value =="")
{
classBack="invalid ";
}
classBack +=thisClass;
break;
default:
**if(allGood && !crossCheck(thisTag,thisClass))
{
classBack ="invalid ";
}**
classBack +=thisClass;
}
return classBack;
}
/* 判断该标签与指定标签中的值是否相同*/
**function crossCheck(inTag,otherFieldID)
{
if(!document.getElementById(otherFieldID))
{
return false;
}
return (inTag.value ==document.getElementById(otherFieldID).value);
}**
一定很奇怪指定标签在哪里吧?
<p> <label for="passWd2">Verify password:<input type="password" id="passWd2" **class="reqd passwd1"**></label></p>
上述class 属性就已经指定标签啦,很神奇吧~~~
标识有问题的字段
将输入字段的边框改成红色是很不错的,但是如果能够让有问题的字段再醒目一点就更好啦。
还是使用上述html代码和css代码,加入几行js 代码即满足需求。
window.onload = initForms;
/* 遍历查找页面的所有的form表单*/
function initForms(){
for(var i=0;i<document.forms.length;i++)
{
document.forms[i].onsubmit=validForm;
}
}
/*查找系统中所有的input标签并对标签进行进一步处理*/
function validForm()
{
var allGood=true;
var allTags=document.getElementsByTagName("input");
for(var i=0;i<allTags.length;i++)
{
if(!validTag(allTags[i],allGood))
{
allGood=false;
}
}
return allGood;
}
/*处理相应标签中的类选择器*/
function validTag(thisTag,allGood)
{
var outClass="";
var allClasses=thisTag.className.split(" ");
for(var j=0;j<allClasses.length;j++)
{
outClass+=validBasedOnClass(allClasses[j],thisTag,allGood)+" ";
}
thisTag.className=outClass;
if(outClass.indexOf("invalid") >-1)
{
**invalidLabel(thisTag.parentNode);**
thisTag.focus();
if(thisTag.nodeName == "INPUT")
{
thisTag.select();
}
return false;
}
return true;
}
function validBasedOnClass(thisClass,thisTag,allGood)
{
var classBack="";
switch(thisClass)
{
case "":
case "invalid":
break;
case "reqd":
if(allGood && thisTag.value =="")
{
classBack="invalid ";
}
classBack +=thisClass;
break;
default:
if(allGood && !crossCheck(thisTag,thisClass))
{
classBack ="invalid ";
}
classBack +=thisClass;
}
return classBack;
}
/* 判断该标签与指定标签中的值是否相同*/
function crossCheck(inTag,otherFieldID)
{
if(!document.getElementById(otherFieldID))
{
return false;
}
return (inTag.value ==document.getElementById(otherFieldID).value);
}
/*对有问题的字段标签加上相应的类选择器*/
**function invalidLabel(parentTag)
{
if(parentTag.nodeName == "LABEL")
{
parentTag.className+=" invalid";
}
}**
总结完毕,欢迎指正!!!