JavaScript实用示例之根据其他字段对字段进行检查

本文介绍如何使用HTML、CSS和JavaScript实现表单验证功能,包括必填字段检查和密码一致性验证。通过设置样式突出未填写的字段,并在提交表单前检查密码是否一致,确保用户输入的数据有效。

 

在填写表单时,可能希望指定用户必须填写某些字段,然后才能提交表单。可以使用JavaScript检查某些或所有字段是否已经填写了。在这个示例中,使用了HTML、CSS和JavaScript通过红色的边框和黄色的内部颜色突出显示未填写的字段。检查在用户单击表单的Submit按钮时进行。

         也经常需要根据另一个字段对一个字段进行检查,尤其是在要求用户设置密码时。为了确保密码正确,希望用户输入密码两次,并确保两次的输入完全相同。此示例当检查无效时,无效的字段会显示红色的边框。

   密码检查示例的HTML

[html]  view plain copy
  1. <html xmlns="http://www.w3.org/1999/xhtml">  
  2. <head>  
  3.     <title>Password Check</title>  
  4.     <link type="text/css" rel="stylesheet" href="script01.css" />  
  5.     <script type="text/javascript" src="script01.js"></script>  
  6. </head>  
  7. <body>  
  8. <form action="#">  
  9.     <p><label for="userName">Your name: <input type="text" size="30" id="userName" class="reqd" /></label></p>  
  10.     <p><label for="passwd1">Choose a password: <input type="password" id="passwd1" class="reqd" /></label></p>  
  11.     <p><label for="passwd2">Verify password: <input type="password" id="passwd2" class="reqd passwd1" /></label></p>  
  12.     <p><input type="submit" value="Submit" /> <input type="reset" /></p>  
  13. </form>  
  14. </body>  
  15. </html>  


  表示为无效的表单元素设置样式的CSS

[css]  view plain copy
  1. body {  
  2.     color#000;  
  3.     background-color#FFF;  
  4. }  
  5.   
  6. input.invalid {  
  7.     background-color#FF9;  
  8.     border2px red inset;  
  9. }  
  10.   
  11. label.invalid {  
  12.     color#F00;  
  13.     font-weightbold;  
  14. }  


使用下面的脚本比较两个字段的值,检查它们是否匹配

[javascript]  view plain copy
  1. window.onload = initForms;  
  2.   
  3. function initForms() {  
  4.     for (var i=0; i< document.forms.length; i++) {  
  5.         document.forms[i].onsubmit = function() {return validForm();}  
  6.     }  
  7. }//这个函数遍历页面上的每个表单  
  8.   
  9. function validForm() {  
  10.     var allGood = true;  
  11.     var allTags = document.getElementsByTagName("*");  
  12. //星号让JavaScript返回一个包含页面上所有标签的数组。  
  13.     for (var i=0; i<allTags.length; i++) {  
  14.         if (!validTag(allTags[i])) {  
  15.             allGood = false;  
  16.         }  
  17.     }  
  18.     return allGood;  
  19. //返回allGood,以此表明是否应该继续提交表单  
  20.     function validTag(thisTag) {  
  21.         var outClass = "";  
  22.         var allClasses = thisTag.className.split(" ");  
  23.       
  24.         for (var j=0; j<allClasses.length; j++) {  
  25.             outClass += validBasedOnClass(allClasses[j]) + " ";  
  26.         }  
  27.       
  28.         thisTag.className = outClass;  
  29.       
  30.         if (outClass.indexOf("invalid") > -1) {  
  31.             thisTag.focus();  
  32.             if (thisTag.nodeName == "INPUT") {  
  33.                 thisTag.select();  
  34.             }  
  35.             return false;  
  36.         }  
  37.         return true;  
  38.           
  39.         function validBasedOnClass(thisClass) {  
  40.             var classBack = "";  
  41.           
  42.             switch(thisClass) {  
  43.                 case "":  
  44.                 case "invalid":  
  45.                     break;  
  46.                 case "reqd":  
  47.                     if (allGood && thisTag.value == "") {  
  48.                         classBack = "invalid ";  
  49.                     }  
  50.                     classBack += thisClass;  
  51.                     break;  
  52.                 default:  
  53.                     if (allGood && !crossCheck(thisTag,thisClass)) {  
  54.                         classBack = "invalid ";  
  55.                     }//现在要检查两个密码字段是否相同  
  56.                     classBack += thisClass;  
  57.             }  
  58.             return classBack;  
  59.         }  
  60.                   
  61.         function crossCheck(inTag,otherFieldID) {  
  62.             if (!document.getElementById(otherFieldID)) {  
  63.                 return false;  
  64.             }  
  65.             return (inTag.value == document.getElementById(otherFieldID).value);  
  66.         }  
  67.     }  
  68. }  

      document.forms[i].onsubmit = function() {return validForm();

      对每个表单,它为表单的onsubmit添加一个事件处理程序:对function(){return validForm();}的调用。这是另一个匿名函数,但是这一次它要执行一些操作:它返回true或false,告诉浏览器是否继续处理动作属性。当onsubmit处理程序返回false值时,表单就不会被传递回服务器。只有在返回true时,服务器才会收到表单(因此运行动作属性中存储的CGI)。

      if (outClass.indexOf("invalid") > -1) {

      在新的class属性中可能返回的值之一是单词invalid,所以要检查它。如果在新的类中找到了invalid,就说明有问题,因此执行对应的操作。

      thisTag.focus();

      如果这个表单字段可以获得焦点,那么希望将焦点放进这个字段,这一行就完成这个任务。这是让用户知道哪个字段有问题的一种方法。

      if (thisTag.nodeName == "INPUT") {thisTag.select();}

      判断当前查看的这个标签是<INOUT>标签吗?如果是,就选择它的值,让用户能够轻松的修改它。

      function crossCheck(inTag,otherFieldID) {

               if (!document.getElementById(otherFieldID))

                          {return false;}

                         return (inTag.value == document.getElementById(otherFieldID).value);

        }它接收当前标签和检查所针对的另一个字段id。在这个示例中,当前标签是passwd2<input>,另一个字段的id是passwd1。如果另一个字段不存在,就无法进行检查,这就说明有问题,所以函数返回false。否则,这两个字段都存在,所以可以比较它们的值:如果相同,就返回true,否则返回false。

更多信息请查看 java进阶网 http://www.javady.com

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值