- 浏览: 386503 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (269)
- FY_UML (3)
- FY_JAVA (12)
- FY_JavaScript脚本 (7)
- FY_JSP (3)
- FY_Tapestry框架 (12)
- FY_Spring框架 (3)
- FY_Manager (5)
- FY_Junit(单元测试) (3)
- SERVER (14)
- FY_Struts2框架 (3)
- FY_SVN (2)
- FY_NoSQL (2)
- FY_jquery_sir (13)
- FY_hibernate_sir (8)
- FY_设计模式_sir (6)
- FY_Extjs_sir (10)
- FY_CI_sir (5)
- FY_Oracle_sir (11)
- FY_MySql_sir (10)
- FY_Hadoop_sir (3)
- FY_SOA_sir (1)
- 中文分词技术 (1)
- FY_Android (52)
- FY_架构 (2)
- FY_PhoneGap (2)
- FY_Webstorm (5)
- FY_Sencha Touch (3)
- HTML5应用快速开发 (1)
- FY_python (0)
- HADOOP (1)
- AI (0)
最新评论
-
antao592:
楼主,HkDataSourceWrapper中的getCurr ...
结合spring jdbc 实现分表分库的数据库访问构思 -
bonait:
不错,看看我的这个怎么样www.zipin168.com
So Easy京东商城 -
chenzheng8975:
...
So Easy京东商城 -
yzhenxing:
我导入demo后少com.google.android.gms ...
google地图demo -
echoaiya:
非常感谢~~
google地图demo
自定义表单验证框架
/** * */ var Tool = {}; Tool.onReady=function(handler){ window.onload=handler; } Tool.createSpan=function(style,msg){ return "<span class="+style+">"+msg+"</span>" } Tool.getEl=function(id){ return document.getElementById(id); } //为消息提供样式选择 Cls=function(){ this.input="inputsgl"; this.radio=""; this.check=""; this.textarea=""; this.select=""; this.defaultCls="onshow"; this.blurCls=""; this.focusCls="onfocus"; this.errorCls="onerror"; this.rightCls="oncorrect"; this.setClass=function(o,className){ o.className=this[className] } } //此类定义了一些正则表达式 Reg=function(){ this.user=/^\w{6,12}$/;//用户名 一般是 6-12位 this.email=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;//电子邮件 this.phone=/^\d{3}-\d{8}|\d{4}-\d{7}$/;//国内电话号码 //this.html=/^<(\S*?)[^>]*>.*?</\1>|<.*? />$/; this.blank=/^$/; this.postcode=/^[1-9]\d{5}(?!\d)$/;//邮编 this.card=/^\d{15}|\d{18}$/;//身份证号码 this.tinteger=/^[1-9]\d*$/;//正整数 this.tinteger=/^-[1-9]\d*$/;//负整数 } //表单组件验证类 Fv=function(c){ this.config=c; this.form; //设置当前注册的表单 this.cls= new Cls;//初使化消息样式 this.regexp=new Reg;//初使化正则表达式 //注册当前form表单对象 this.register=function(){ this.form=document.forms[c.form]; this.form.onsubmit=this.submit(c);//设置当前表单的提交监听函数 this.reg(this.config.fields); } setMsg=function(o,c,m){//设置消息方法,局部方法,当一个内部类来用 o.className=c; o.innerText=m; } this.reg=function(cf){//注册表单,主要是将配置信息注册到表单中 if(cf.length<1) return; var o,k; for(var i=0;i<cf.length;i++){ k=cf[i]; o=this.form[k.name]; //添加默认表单组件信息 k.defaultMsg?this.addMsg(this.cls.defaultCls,k.defaultMsg,k.msgTip):""; //添加得到焦点时的信息 k.focusMsg?this.addFocusListener(o,{cls:this.cls.focusCls,msg:k.focusMsg,tip:k.msgTip}):""; //为组件添加失去焦点监听函数 this.addBlurListener(o,k); } } //添加得到焦点事件 o 表单对象,m消息对象 this.addFocusListener=function(o,m){ var arr=(!o.length || o.nodeName=='SELECT')?[o]:o; for(var i=0;i<arr.length;i++){ arr[i].onfocus=this.addEvMsg(m.cls,m.msg,m.tip); } } //添加表单组件失去焦点 this.addBlurListener=function(o,k){ //var arr=o.length?o:[o]; var arr=(!o.length || o.nodeName=='SELECT')?[o]:o; var t=this.getType(o); for(var i=0;i<arr.length;i++){ arr[i].onblur=(this[t+"OnBlur"])(o,k); } } //文本框推动焦点时触发的事件 this.textOnBlur=function(o,k){ var cl=this.cls.defaultCls; var el=this.cls.errorCls; var rl=this.cls.rightCls; var t=Tool.getEl(k.msgTip); var r=(typeof(k.regExp)=="string")?this.regexp[k.regExp]:k.regExp; return function(){ var clazz,msg; if(o.value==""){ clazz=cl; msg=k.defaultMsg; }else{ if(r && !r.test(o.value)){ clazz=el; msg=k.errorMsg; }else{ clazz=rl; msg=k.rightMsg; } } setMsg(t,clazz,msg); } } //多选框失去焦点时触发的事件 this.checkOnBlur=function(o,k){ var dc=this.cls.defaultCls; var rc=this.cls.rightCls; return function(){ var cls=dc,msg=k.defaultMsg; var tip=Tool.getEl(k.msgTip); var c=0; for(var j=0;j<o.length;j++){ if(o[j].checked){ c++; if(c>=k.number){ cls=rc; msg=k.rightMsg; break; } } } setMsg(tip,cls,msg); } } //单选框失去焦点时触发的事件 this.radioOnBlur=function(o,k){ var dc=this.cls.defualtCls; var rc=this.cls.rightCls; return function(){ var cls=dc,msg=k.defaultMsg; var tip=Tool.getEl(k.msgTip); for(var j=0;j<o.length;j++){ if(o[j].checked){ cls=rc; msg=k.rightMsg; break; } } setMsg(tip,cls,msg); } } //下拉列表失去焦点时触发的事件 this.selectOnBlur=function(o,k){ var dc=this.cls.defaultCls; var rc=this.cls.rightCls; return function(){ var cls=dc,msg=k.defaultMsg; var tip=Tool.getEl(k.msgTip); if(o.selectedIndex>0){ cls=rc; msg=k.rightMsg; } setMsg(tip,cls,msg?msg:''); } } this.submit=function(){//由于事件监听函数不能有参数,所以这里用一个闭包 var f=this.form;//f为this.form 的一个引用,当在闭包函数中的时候,this 指向的是window,而不是当前的那个对象了 var re=this.regexp; var style=this.cls; var config=this.config; return function(){ var result=true; var c,r,o,cla,msg,tip; var vf=config.fields; for(var i=0;i<vf.length;i++){//循环验证表单是否验证通过 c=vf[i]; o=f[c.name]; tip=Tool.getEl(c.msgTip); var r=(typeof(c.regExp)=="string")?re[c.regExp]:c.regExp; if(isPassed(o,c,r)){ cla=style.errorCls; msg=c.errorMsg; result=false; setMsg(tip,cla,msg); } } var r=config['submit']?(config['submit'])():true; return result && r; } } isPassed=function(o,c,r){//是否通过验证 var type=o.type || (o.length && o[0].type); switch(type){ case 'text' : case 'password'://判断文本控件,这样的控件是可以有正则表达式的 return (!c.allownull && !r.test(o.value)) || (c.allownull && o.value!='' && !r.test(o.value)); case 'radio': return !(c.allownull || isChecked(o,1)); case 'checkbox': return !(c.allownull || isChecked(o,c.number)); case 'select-one': return !(c.allownull || o.selectedIndex>1); default: return true; } return false; } //判断选中个数是 isChecked=function(o,n){ var c=0; for(var i=0;i<o.length;i++){ if(o[i].checked) c++; } return c>=n; } //判断下拉列表是否被选择了 isSelected=function(o,n){ var c=0; for(var i=0;i<o.length;i++){ if(o[i].checked) c++; } return c>=n; } //失去焦点时显示的信息 this.onblurMsg=function(o,c){ var cl=this.cls.defaultCls; var el=this.cls.errorCls; var rl=this.cls.rightCls; var t=Tool.getEl(c.msgTip); var r=(typeof(c.regExp)=="string")?this.regexp[c.regExp]:c.regExp; return function(){ var clazz,msg; if(o.value==""){ clazz=cl; msg=c.defaultMsg; }else{ if(r && !r.test(o.value)){ clazz=el; msg=c.errorMsg; }else{ clazz=rl; msg=c.rightMsg; } } setMsg(t,clazz,msg); } } this.addMsg=function(c,m,i){ var o = Tool.getEl(i); o.className=c; o.innerText=m; } this.addEvMsg=function(c,m,i){ return function(){ var s = Tool.getEl(i); s.className=c; s.innerText=m; } } this.getType=function(o){ var type=o.type || (o.length && o[0].type); switch(type){ case 'text' : case 'password': return "text"; case 'radio': return "radio"; case 'checkbox': return "check"; case 'select-one': return "select"; default: return ''; } } this.getEl=function(name){ return this.form[name]; } this.addClass=function(f){ var cn=this.getType(f); this.cls.setClass(f,cn); } }
调用
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <link rel="stylesheet" href="css/validator.css" type="text/css"></link> <link rel="stylesheet" href="css/style.css" type="text/css"></link> <script type="text/javascript" src="Fv.js"></script></head> <script type="text/javascript"> //var config=[{id:'username',isnull:true}]; function handler(){ alert("调用了自己的提交"); alert("就算验证通过我也不让表单提交,我返回一个false"); return false; } var config={form:"myform",submit:handler, fields:[{name:'username',allownull:false,regExp:'user',defaultMsg:'用户名不能为空,6-12位,如:zhangsan',focusMsg:'请输入你的用户名',errorMsg:'用户名不能为空,且不能有非法字符',rightMsg:'用户名输入合法',msgTip:'usertip'}, {name:'pwd',allownull:false ,regExp:'user',defaultMsg:'密码不能为空,6-12位,如:******',focusMsg:'请输入你的密码',errorMsg:'密码不能为空,且不能有非法字符',rightMsg:'用户密码输入合法',msgTip:'pwdtip'}, {name:'email',allownull:true,regExp:/^\w{3,12}@\w{1,10}.\w{2,10}$/,defaultMsg:'电子邮箱如:kefu@sina.com',focusMsg:'请输入你的电子邮箱',errorMsg:'非法的电子邮箱帐号',rightMsg:'电子邮箱输入正确',msgTip:'emailtip'}, {name:'sex',allownull:false,defaultMsg:'请选择用户性别',focusMsg:'没有第三种性别可选了',errorMsg:'用户性别必须选择',rightMsg:'你确认这个性别的吗?',msgTip:'sextip'}, {name:'likes',allownull:false,number:2,defaultMsg:'请选择用户爱好',focusMsg:'认真选择你的爱好吧',errorMsg:'用户爱好必须选择两项',rightMsg:'这些都是不错的爱好!',msgTip:'likestip'}, {name:'age',allownull:false,defaultMsg:'请选择您的年龄',focusMsg:'年龄必须要选择',errorMsg:'你还没有选择你的年龄!',rightMsg:'年龄选择正确!',msgTip:'agetip'} ]} Tool.onReady(function(){ var f = new Fv(config); f.register(); }); </script> <body> <form action="" id="myform" id="myform" method="POST"> <center> <table> <tr><td>用 户 名:</td><td><input type="text" name="username" width=80/></td><td><span id="usertip"></span></td></tr> <tr><td>密 码:</td><td><input type="text" name="pwd" width=80/></td><td><span id="pwdtip"></span></td></tr> <tr><td>电子邮箱:</td><td><input type="text" name="email" width=80/></td><td><span id="emailtip"></span></td></tr> <tr><td>性 别:</td><td><input type="radio" name="sex" value="男" >男 <input type="radio" name="sex" value="女" >女</td><td><span id="sextip"></span></td></tr> <tr><td>爱 好:</td><td><input type="checkbox" name="likes" value="体育" >体育 <input type="checkbox" name="likes" value="蓝球" >蓝球</td><td><span id="likestip"></span></td></tr> <tr><td>年 龄:</td><td><select name="age"><option>请选择</option><option>18</option><option>20</option><option>19</option></select></td><td><span id="agetip"></span></td></tr> <tr><td colspan=3 align="center"><input type="submit" value="提交表单"></td></tr> </table> </center> </form> </body> </html>
- 自定义表单验证框架.rar (11.2 KB)
- 下载次数: 25
发表评论
-
jquery插件开发
2010-08-20 18:03 922js代码 /************************ ... -
QQ相册
2010-08-18 15:27 1363Galleriffic-jquery图片画廊插件 插件 ... -
jquery_upload
2010-08-18 09:49 2827一、下载最新版的uploadi ... -
jquery_js_oop
2010-07-09 09:28 777/** * 定义函数的方式定义类 */ functi ... -
<<javascript+jquery书(源代码)>>
2010-07-08 20:52 508<<javascript+jquery(源代码)& ... -
jquery_demo
2010-07-08 19:17 878jquery_demo -
jquery_doc
2010-07-08 08:49 582JQuery_1.4.chm官方文档。。 -
第五章-JQUERY-Ajax
2010-07-07 21:41 811ajax 本章任务1. 获取异步数据 - 传统方法(14- ... -
第四章-JQUERY-功能函数
2010-07-07 21:38 835工具类 本章任务1. 浏览器的检测 - $.browser ... -
第三章-JQUERY-制作动画与特效
2010-07-07 21:35 1000元素 本章任务1. 元素的显示与隐藏 - show()和h ... -
第二章-JQUERY-控制页面
2010-07-07 21:32 705本章任务 1. 标记的属性 - 获取属性的值(11-2.h ... -
第一章-JQUERY-基础
2010-07-07 21:27 744jQuery概述本章任务 http://jquery.com ...
相关推荐
"强大的表单验证框架"标题所指的,很可能是用于简化这一过程的高效工具,旨在帮助开发者更方便、更有效地进行表单数据验证。 表单验证框架通常包含以下核心功能: 1. **规则定义**:提供丰富的验证规则,如非空、...
在本项目"activiti自定义表单demo"中,我们主要关注的是如何使用SpringBoot集成Activiti工作流引擎,实现自定义表单和流程。这个Demo提供了完整的代码示例,帮助开发者理解并应用到实际项目中。以下是相关知识点的...
【基于layui自定义表单组件】是针对C#开发者设计的一种高效前端开发工具,它结合了layui框架的优势,为创建动态、交互性强的Web表单提供了便利。layui是一款优秀的前端轻量级框架,以其简洁的代码结构、丰富的模块...
formvalidator 是一个强大的前端表单验证框架,专为开发者提供高效、灵活的表单数据验证解决方案。这个框架允许开发者在用户提交表单前检查输入的数据,确保数据的完整性和准确性,从而提高用户体验并减少服务器端的...
7. **错误处理和验证**:自定义表单可能包含自定义的验证规则,确保用户输入的有效性。可以使用控件的Validating和Validated事件来实现这一点,或者创建自定义验证器类。 8. **国际化和本地化**:如果应用程序需要...
"表单验证框架"就是一种专门用于简化这一过程的工具,它提供了便捷的方式来验证用户在网页表单中填写的信息。 首先,我们要理解表单验证的重要性。在网页应用中,用户输入的数据经常需要被处理或存储,例如注册账号...
总的来说,"JAVA动态表单设计,自定义表单,自定义数据"涉及的技术栈包括Java后端开发、前端界面设计、数据库管理和RESTful API设计。通过以上各模块的协同工作,可以构建出一个高效、易用的动态表单系统,满足不同...
三、表单验证 在自定义表单中,验证是确保用户输入符合预设规则的关键步骤。这可以通过前端验证(JavaScript)或后端验证(服务器端语言如PHP、Java、Python等)来实现。前端验证可提高用户体验,但后端验证同样必不...
自定义表单设计器是一种强大的工具,它允许用户根据自己的需求创建和定制各种表单,而无需深入编程。在“自定义表单设计器演示程序”中,我们能够探索这种技术的实际应用,通过提供的两个示例模板,可以更好地理解其...
2. 自定义控件:除了.NET Framework提供的标准控件,自定义表单设计器可能还包括一些特定的自定义控件,这些控件可能具有特殊的功能或者外观,如数据绑定、验证规则等。 3. 设计时支持:为了在设计器中正确显示和...
Java表单验证框架是开发Web应用时不可或缺的一部分,它能够帮助开发者轻松地对用户输入的数据进行有效性检查,确保数据的准确性和安全性。本框架以简洁、高效为特点,通过在表单字段上添加正则表达式标签,即可实现...
在使用**JS客户端表单验证框架**时,开发者不再需要手动编写复杂的JavaScript函数来处理每个验证规则。框架内包含了一套完善的规则定义系统,允许开发者根据业务需求设置各种验证条件,如必填、邮箱格式、电话号码、...
《jQuery表单验证框架——深入理解jQuery.validate》 在网页开发中,表单验证是必不可少的一环,它能确保用户输入的数据符合预期,减少服务器端的处理负担,提高用户体验。jQuery是一个广泛使用的JavaScript库,而...
3. **配置struts-config.xml**:在项目的`struts-config.xml`配置文件中,你需要将自定义的ActionForm与相应的Action进行关联,并指定表单验证使用的ActionForm类。同时,可以在这里配置全局错误消息,以及默认的...
sui表单验证框架是一款强大的JavaScript开发工具,专用于实现高效、灵活的表单验证功能。在Web应用中,表单验证是不可或缺的一部分,它确保用户输入的数据符合预设的规则,从而提高数据质量和用户体验。sui框架凭借...
2. 表单验证:在客户端,可以通过JavaScript进行基本的表单验证,如非空检查、格式校验等。在服务器端,PHP可以接收并处理表单数据,进行更严格的验证,确保数据的安全性和完整性。 二、自定义表单生成 1. 动态...
自定义验证框架是Struts的一个强大功能,允许开发者根据特定的业务需求定制验证逻辑。以下将详细介绍如何在Struts中实现自定义验证框架,以及其关键组件和工作流程。 1. **配置验证规则**: 在Struts中,验证规则...