`

【prototype学习】基于prototype的表单验证(二)

阅读更多
上次在javaEye上看到了一个有关验证的帖子后,感觉和我的想法很相似,就着手做了扩展,
http://www.iteye.com/topic/36302做得比较简单,因为当前的项目只要求在IE下OK,也没仔细改进,该帖子发出以后,有人推荐了国外的一个验证框架,以前我也看到过,当时没发现其亮点,而且功能上实在太简单,无法胜任平时的验证,几乎只是一些不带参数的格式验证,如数字、字母等等,再者有人大力推荐国人badqiu对其做的扩展,做得很不错,几乎能胜任我所遇到的所有验证:
1、每个验证规则需重复考虑是否为空
2、老外本身没考虑国际化,所以框架中把默认错误信息和验证规则绞合在一起。
3、badqiu做了验证规则的depends扩展,如validate-in-rang 规则 回在其验证之前进行 validate-integer 的验证,由于是在老框架上做这样的处理,使得代码可读性下降很多。
4、该框架没有把验证的逻辑和各种帮助函数很好的分开,使得整个逻辑部分不够集中,代码可读性和条理上不够清爽。
5、validation验证器内部传递参数过于复杂,很多地方都是需要几个参数就传几个参数这样而不是把整个实例的引用传过去,导致代码阅读比较费力。
6、命名上validation验证器把每个验证规则称为 validator 整个验证器称为 validation 区别不是很明了,而我的理解是元素classname中每个name对应的是一条规则而已,所以easyvalidation中使用的是rule,且我把整个验证相关的部分都封装在easyvalidation命名空间之内。
另外我针对 radio checkbox 和 select 实现了 选项数目的范围等验证.对照myvalidator做
了个相应的demo 。把badqiu和老外(andrew)的验证demo 分别对应做了一下
(个别不一定配置全部正确 时间和精力的关系,今天刚完成),并且把几种不同配置下的demo做成了单独的页面,针对一些特别的html tag,老外和badqiu的在这上面,我用的时候觉得应该改进,所以做了修改,实现效果会不一样。
    做这个东西,并不带什么目的性(自己能用上 ),只是拿出来和大家作为一个学习上的交流而已,我这段时间在学习javascript,想针对prototype做一些东西练练手,刚好验证这一块也是我很感兴趣的.
   这个东西如有不完善之处,希望有兴趣的朋友发现后能给予说明。

PS:一有最新的我就放到这里来哦 我回更改日期的
20070126


20080815

2008081523
针对select radio checkbox的验证效果也做了改良 各位可以看看 还不满意的 请提意见 谢谢:)

  • 20080815.rar (30 KB)
  • 描述: 进行了各个文件的分离,吸收了一些朋友提出的问题
  • 下载次数: 209
  • 2008081523.rar (30.3 KB)
  • 描述: 比较完整好用了 嘿嘿
  • 下载次数: 666
分享到:
评论
25 楼 jianfeng008cn 2007-08-29  
bubble 写道
支持sturts的页面校验吗,我不喜欢struts的那个validator框架,呵呵


name要支持也方便的 等我空一点加上 现在就加个id拉 已经很简单了吧 呵呵 接下来我会逐渐简化代码的
24 楼 bubble 2007-08-28  
支持sturts的页面校验吗,我不喜欢struts的那个validator框架,呵呵
23 楼 jianfeng008cn 2007-08-15  
项目没使用submit按钮来提交表单 而且需要使用自动验证功能 已做到前台验证没有js代码 方法根据
http://ajax.org/space/start/2006-05-15/2非常感谢

代码已经提交 带了2个例子 见主贴附件 2007081523.jar
22 楼 jianfeng008cn 2007-08-15  
最近做一个小项目 验证重新搞了下,按照以前的想法进行了错误资源文件error 工具文件util 逻辑辅助文件helper 和主要逻辑文件easyvalidation的分离。
21 楼 jianfeng008cn 2007-08-15  
sunjilu05 写道
submit button reset 等元素应该不用验证直接跳过才对.

if(tagN=='input'){
			if(type == 'submit' || type== 'button' || type=='reset'){
				return null;
			}
			if(type == 'file') {
				return elm.value;
			}
			if(type == 'radio'||type == 'checkbox') {
				return type;
			}			
			return $F(elm);		
		}



这样处理目前没发现问题 可以看$F的实现
20 楼 jianfeng008cn 2007-08-15  
sunjilu05 写道
Try.these(
			function(){ return $('advice-' + className + '-' + EasyValidationHelper.getElmID(elm)) },
			function(){ return $('advice-' + EasyValidationHelper.getElmID(elm)) }
		);


当第一 function 返回null时好象不会执行第二个 吧


返回null是在哪种情况下呢?
19 楼 sunjilu05 2007-06-27  
submit button reset 等元素应该不用验证直接跳过才对.

if(tagN=='input'){
			if(type == 'submit' || type== 'button' || type=='reset'){
				return null;
			}
			if(type == 'file') {
				return elm.value;
			}
			if(type == 'radio'||type == 'checkbox') {
				return type;
			}			
			return $F(elm);		
		}

18 楼 sunjilu05 2007-06-25  
Try.these(
			function(){ return $('advice-' + className + '-' + EasyValidationHelper.getElmID(elm)) },
			function(){ return $('advice-' + EasyValidationHelper.getElmID(elm)) }
		);


当第一 function 返回null时好象不会执行第二个 吧
17 楼 goby2008 2007-06-10  
这种写法,相比在struts里做验证,好多啦!
16 楼 liuzongan 2007-05-30  
学习学习再学习!!!
15 楼 小嘴看世界 2007-03-28  
我也做过一个验证表单的东西
使用的是validation_cn.js 跟楼主用的一样 只是不知道版本是多少
感觉还是很好用的 提供了很多正则表达式 自己如果需要略加补充就OK了
14 楼 jeamzhang 2007-02-05  
厉害!!研究!研究!!!
13 楼 jianfeng008cn 2007-02-03  
恩,谢谢!
12 楼 Tobar 2007-02-02  
647行能不能改成
this.form = $(form)?$(form):document.forms[form];

否则当form对象没有id的时候无法用name来获得引用
11 楼 billy119 2007-01-24  
嗯,你说的也是,这个东西好看只是加分作用,功能其实和你这个,以及Validation都差不多,嗯,不过觉得国外他们这个东西在细节方面比较注意,像是色彩搭配,边框,看起来挺精致的。呵呵,毕竟是产品化的东西。另谢谢lz的无私奉献,呵呵
10 楼 jianfeng008cn 2007-01-24  
谢谢ls朋友的建议,不过我感觉你说的那个东东是把简单问题做复杂了,我相信,项目中客户在这方面不会有什么苛刻的要求,那个验证别说客户了,我用着都不明白,得好好思量了一番,而且配置烦琐,功能也不见得强大

你说的图片功能可以通过css来实现的

接下来我想把验证的规则,错误信息,验证核心代码等放到不同的文件里,
然后做几个demo把一些我想到的比较好的用法展示一下。
9 楼 billy119 2007-01-24  
我原来运行的就是根目录下的,不过现在运行最新的就没有问题了:)
还想提点建议就是像Zapatec AJAX Forms那样
1.图片提示
2.输入框限制提示例如:
___-____
Zapatec AJAX Forms的运行速度比较慢
8 楼 jianfeng008cn 2007-01-24  
billy119 写道
在firefox2.0.0.1下无法正常使用,交验效果一点都没出来


我的firefox是这样的

Mozilla/5.0 (Windows; U; Windows NT 5.1;
en-US; rv:1.8.0.8) Gecko/20061025
Firefox/1.5.0.8

能进行验证啊 你指的是根目录下的还是里面那些目录下的demo啊?

我再把最新的demo发一下,前面的过段时间我就把他删掉
7 楼 billy119 2007-01-24  
在firefox2.0.0.1下无法正常使用,交验效果一点都没出来
6 楼 jianfeng008cn 2007-01-23  
wuhua 写道
Hi 总楼主,我再使用您的类库的时候发现一个问题:
问题描述,密码验证问题:
比如你在例子中是这样的。
  <tr>
   <td>密码:</td><td><input name="password" id="password" class='required' ></td>
  </tr>
  <tr>
   <td>elm-equals-password:</td><td><input name="passwordRepeat" id="passwordRepeat" class='required elm-equals-password' ></td>
  </tr>
这样是没问题的
我吧其中
tr>
   <td>密码:</td><td><input name="password" id="password" class='required' ></td>
  </tr>

name="password" id="password"
改为member.password ,然后点提交的时候就没反应,
里面提示js错误说tagname不时对象或者时没定义

能解决吗?



elm-equals-password

这个password也需要改成member.password ,谢谢提出问题,我会改进的。

相关推荐

    基于Prototype的Validation表单验证插件.rar

    实现Ajax风格的无刷新表单验证功能,当用户输入完表单,即时显示该项输入是否正确,不正确则会给出提示,适合那些比较喜欢简洁风格,又要求功能准确的用户,本款表单验证插件基于Prototype插件。

    基于prototype的表单验证框架rapid-validation-v1.0

    简洁,快速的验证语法 无需编写验证提示信息(当然也支持自定义提示信息) 错误消息在指定地方显示 支持组合验证 Ajax支持 基于prototype.js 支持国际化 易于扩展 基于标准的Html属性...

    表单验证类 基于prototype的validation.js

    validation.js是一个基于prototype表单前端验证工具,与其它库相比,简单易用.

    Ajax最全页面验证-基本prototype框架

    Ajax最全页面验证-基本prototype框架 动态验证

    基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼

    增加validate-ajax以支持ajax验证 增加validate-pattern直接通过正则表达式的认证 修改validate-equlas以验证密码与确认密码的问题 增加less-than与great-than的验证以支持开始日期与结束日期相比较的问题 增加...

    表单验证案例_创建节点 _prototype 框架的使用 _Select,option的使用 _级联下拉列表案例

    Dom查找的第2种方式 _表单验证案例_创建节点 _prototype 框架的使用 _Select,option的使用 _级联下拉列表案例;

    Javascript表单验证控件(Validator v1.05).rar

    Javascript表单验证控件(Validator v1.05).rar --------------------------------- 内含以下两个文件: Validator.chm(详细的使用帮助文档) validator.js(源代码,当然没有prototype.js强大,但最...

    超好用的表单验证插件(LiveValidation)

    它有standalone version 和基于prototype的prototype.js version两个版本,可能是作者喜欢用prototype吧,呵呵。 livevalidation 官方网站(英文):http://livevalidation.com/examples LiveValidation 官方文档...

    web前端开发教程之编写简洁的页面表单验证程序

    看了山人表单验证,又看了其他一些验证程序和相关的一些参考资料,写出了一个比较简洁的js表单验证程序。 功能简述: 验证: http地址 时间日期 e-mail 数字 字符长度检查 一项输入与另一项输入比较(例如:...

    javascript表单验证类

    原创: 因项目需要,自己封装的一个javascript 表单验证类.

    Really easy field validation with Prototype 1.5.3 中文扩展版

    一个基于prototype表单前端验证工具,与其它库相比,简单易用. 包括国际化支持,内附说明,和使用举例。

    Ajax表单验证

    Ajax最全页面验证-基本prototype框架.rar

    Validation Ajax表单验证类 v5

    内容索引:脚本资源,Ajax/JavaScript,表单验证类,ProtoType,Validation Validation Ajax表单验证类,基于prototype.js,大家在很多大型网站都能见到这种表单验证的效果,使用的人非常多,调用很简单,压缩包内附有...

    番茄的表单验证类代码修改版

    在经典论坛上发过一次,个人的项目中在后台处理时用到这个东西,对于简单的表单验证还是挺方便的。 因为不想让代码变得太臃肿,所以有很多不常用的功能就没有再添加了 对于我佛山人的意见就没有做修改了,为什么?...

    表单的验证

     本文介绍了如何利用 Prototype.js JavaScript 库在表单中结合 Ajax 代码来解决常见的用户体验问题。  简单的 Ajax 表单提交 基于XML的异步JavaScript,简称AJAX,是当前Web创新(称为Web2.0)中的一个王冠。...

    jQuery扩展+xml实现表单验证功能的方法

    本文实例讲述了jQuery扩展+xml实现表单验证功能的方法。分享给大家供大家参考,具体如下: 此处表单验证jQuery 引用jquery.1.8.2.js,md5.js 扩展提示信息,扩展验证方法(如果有正则表达式的话可以用默认方法) String...

    jquery validate.js表单验证的基本用法入门

    Jquery是继prototype之后又一个优秀的Javascrīpt框架。它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery使用户能更方便地处理...

    Extjs表单常见验证小结

    //为组件提供提示信息功能,form的主要提示信息就是客户端验证的错误信息。 Ext.form.Field.prototype.msgTarget=’side’; //提示的方式,枚举值为: qtip-当鼠标移动到控件上面时显示提示; title-在浏览器的标题...

    WEB开发必备几乎包含所有参考资料

    Linux常用命令全集,linux入门文档,MySQL中文参考手册,PHP_MySQL教程,PHP的一些例程,PHP的一些例程,prototype,Spring+in+Action中文版,SQL Server精华 (CHM),Struts快速学习指南,Validato表单验证,WINDOWS脚本技术,...

    extjs中验证实例

    title:"学习表单字段元素的字段集", width:600, height:400, frame:true, renderTo:"myForm", items:[ {xtype:"fieldset", width:500, labelAlign:"right", labelWidth:70, title:"个人信息" , ...

Global site tag (gtag.js) - Google Analytics