表单验证之validform.js使用方法

一.validform有什么用?

网页上有大量的input需要你进行验证的时候,如果是弹窗的话,需要不停地判断,如果为空,弹窗。如果不是数字,弹窗。
所以要将这么多验证交给一个js去验证。

二.我现在知道的全页面js验证文件

1.jquery.validat.js

这东西就是放在我们的vs中的那个验证用js
这货看起来高大上,但是我就被坑了。。。
这货每个input都要加name啊,不然不验证。。。后来想了想,这东西是用来给form表单做验证的,没有name估计就不发回后台,于是就不验证(如果我的做法不对的话,请指正)
用这货怎么验证ajax提交的数据
添加按钮绑定click事件,function中提交对应的form表单。之后在validate方法中的submithandler这块把对应的ajax方法添加进去。

$("#btnAdd").on("click", function() {
$("#validateform").submit();
});
$("#validateform").validate({
rules: {
txtUrl: {
required: true,
url: true //确定是不是url
},
txtRequired: {
required: true
}
},
submitHandler: function(form) {
addNewAd();
}
});

           

在网上好像还有配合jquery.metadata.js来使用的,不过没有深入研究。

2.validfrom.js

这个验证js我感觉还不错,至少整个是中文的,文档研究起来很容易。
优点:只要每个需要验证的对象都有了datatype这个属性,其他的没有也可以检测,这点对于动态生成的表单来说十分的友好。
不用再像jquery.validate.js那样为每个对象都绑定一个不重样的name,不同的name想检测url还要写很多行rules(至少我是这么写的,不知道有没有更简单的方法)

三.validateform.js简单使用方法

1.datatype

要想标识出来想要验证的对象,我们就需要给这个对象绑定datatype属性,validform.js已经内置了10种验证格式,如果不够,我们还可以使用
来对验证格式进行扩展。
1.1 datatype=*
这个验证是用来表示当前的对象不能为空的,任何字符均可
1.2 datatype=*6-16
validform这个js有个优点,它会自动扩展你所写的验证格式。不同的字段我们可能要求的字符数量不一样,用户名这里你写了*6-16,要求用户填入6到16位的字符。可标题这里又要求填入2到5个字符,难道我们要在验证格式这里再写一个*2-5吗?不用!形如"*6-16"的datatype,Validform会自动扩展,可以指定任意的数值范围。如内置基本类型有"*6-16",那么你绑定 datatype="*4-12"就表示4到12位任意字符。如果你自定义了一个datatype="zh2-4",表示2到4位中文字符,那么 datatype="zh2-6"就表示2到6位中文字符。
1.3 datatype=url
可以用来验证网址。
1.4 datatype=e
可以用来验证电子邮箱地址
1.5 datatype=m
用来验证手机号,但是给的正则表达式有问题,对于新出现的177号段之类的没有加入进去,这块需要注意一下。
1.6 其他注意事项
datatype支持规则累加或单选。用","分隔表示规则累加;用"|"分隔表示规则多选一,即只要符合其中一个规则就可以通过验证,绑定的规则会依次 验证,只要验证通过,后面的规则就会忽略不再比较。如绑定datatype="m|e",表示既可以填写手机号码,也能填写邮箱地址,如果知道填入的是手 机号码,那么就不会再检测他是不是邮箱地址;datatype="zh,s2-4",表示要符合自定义类型"zh",也要符合规则"s2-4"。
直接绑定正则:如可用这样写datatype="/\w{3,6}/i",要求是3到6位的字母,不区分大小写;
支持简单的逻辑运算:如datatype="m | e, *4-18 | /\w{3,6}/i | /^validform\.rjboy\.cn$/",
这 个表达式的意思是:可以是手机号码;或者是邮箱地址,但字符长度必须在4到18位;或者是3到6位的字母,不区分大小写;或者输入 validform.rjboy.cn,区分大小写。这里","分隔相当于逻辑运算里的"&&"; "|"分隔相当于逻辑运算里的"||";不支持括号运算。

2.ignore

绑定了ignore="ignore"的表单元素,在有输入时,会验证所填数据是否符合datatype所指定数据类型,没有填写内容时则会忽略对它的验证;
如何在表单中控制如果某几项要填都填,要不填都不填。
对这几项赋给相同的class 比如AllNeedOrEmpty
之后在初始化参数中的beforeCheck部分对这个class做操作,具体代码如下

 1 beforeCheck: function(curform) {
2 $("#sliderAd ul").each(function() {
3 var needIgnore = true;
4 var _this = $(this);
5 var checkList = _this.find("input[class*=AllNeedOrEmpty]");
6 checkList.each(function() {
7 var that = $(this);
8 if (that.val() != "") {
9 checkList.each(function() {
10 $(this).removeAttr("ignore");
11 });
12 needIgnore = false;
13 }
14 });
15 if (needIgnore) {
16 checkList.each(function() {
17 $(this).attr("ignore", "ignore");
18 });
19 }
20 });
21 },

               

上面的代码只是提供一个思路,肯定有更好的方法,
比如使用validform对象中的ignore方法和unignore方法,通过向这两个方法传入表单元素来忽略和重新获取验证效果。
不过这两种方法是对元素赋给和去掉dataIgnore来实现验证与否。
源码如下:

 1 ignore: function(selector) {
2 var obj = this;
3 var selector = selector || "[datatype]"
4
5 $(obj.forms).find(selector).each(function() {
6 $(this).data("dataIgnore", "dataIgnore").removeClass("Validform_error");
7 });
8
9 return this;
10 },
11
12 unignore: function(selector) {
13 var obj = this;
14 var selector = selector || "[datatype]"
15
16 $(obj.forms).find(selector).each(function() {
17 $(this).removeData("dataIgnore");
18 });
19
20 return this;
21 },

       

我的方法是控制ignore这个attr,而validform方法则是在元素上利用data方法来实现是否验证,思路基本一致,但是当元素是动态生成的时候我觉得还是ignore=ignore这个方法比较好,因为省事啊。
 欢迎评论相互探讨。

3.初始化参数

如下是官网例子中给出的所有的可用参数
 
 1 $(".demoform").Validform({
2 btnSubmit: "#btn_sub", //提交按钮
3 btnReset: ".btn_reset",
4 tiptype: 1, //
5 ignoreHidden: false,
6 dragonfly: false,
7 tipSweep: true,
8 label: ".label",
9 showAllError: false,
10 postonce: true,
11 ajaxPost: true,
12 datatype: {
13 "*6-20": /^[^\s]{6,20}$/,
14 "z2-4": /^[\u4E00-\u9FA5\uf900-\ufa2d]{2,4}$/,
15 "username": function(gets, obj, curform, regxp) {
16 //参数gets是获取到的表单元素值,obj为当前表单元素,curform为当前验证的表单,regxp为内置的一些正则表达式的引用;
17 var reg1 = /^[\w\.]{4,16}$/,
18 reg2 = /^[\u4E00-\u9FA5\uf900-\ufa2d]{2,8}$/;
19 if (reg1.test(gets)) {
20 return true;
21 }
22 if (reg2.test(gets)) {
23 return true;
24 }
25 return false;
26 //注意return可以返回true 或 false 或 字符串文字,true表示验证通过,返回字符串表示验证失败,字符串作为错误提示显示,返回false则用errmsg或默认的错误提示;
27 },
28 "phone": function() {
29 // 5.0 版本之后,要实现二选一的验证效果,datatype 的名称 不 需要以 "option_" 开头;
30 }
31 },
32 usePlugin: {
33 swfupload: {},
34 datepicker: {},
35 passwordstrength: {},
36 jqtransform: {
37 selector: "select,input"
38 }
39 },
40 beforeCheck: function(curform) {
41 //在表单提交执行验证之前执行的函数,curform参数是当前表单对象。
42 //这里明确return false的话将不会继续执行验证操作;
43 },
44 beforeSubmit: function(curform) {
45 //在验证成功后,表单提交前执行的函数,curform参数是当前表单对象。
46 //这里明确return false的话表单将不会提交;
47 },
48 callback: function(data) {
49 //返回数据data是json对象,{"info":"demo info","status":"y"}
50 //info: 输出提示信息;
51 //status: 返回提交数据的状态,是否提交成功。如可以用"y"表示提交成功,"n"表示提交失败,在ajax_post.php文件返回数据里自定字符,主要用在callback函数里根据该值执行相应的回调操作;
52 //你也可以在ajax_post.php文件返回更多信息在这里获取,进行相应操作;
53 //ajax遇到服务端错误时也会执行回调,这时的data是{ status:**, statusText:**, readyState:**, responseText:** };
54
55 //这里执行回调操作;
56 //注意:如果不是ajax方式提交表单,传入callback,这时data参数是当前表单对象,回调函数会在表单验证全部通过后执行,然后判断是否提交表单,如果callback里明确return false,则表单不会提交,如果return true或没有return,则会提交表单。
57 }
58 });
 
3.1 如何使用ajax提交数据,而不提交表单。
1 beforeSubmit: function (curform) {
2 addNewAd();
3 return false;
4 //这里明确return false的话表单将不会提交;
5 }
直接在beforeSubmit中加上对应的ajax提交函数,并加上return false就可以保证表单不会被提交而执行我们的ajax函数。
3.2 tiptype
用来设置提示信息的展示方式,可用的值有:1、2、3、4和function函数,默认tiptype为1。
1代表自定义弹出框提示。
2代表侧边提示,会在当前元素的父级的next对象的子级查找显示提示信息的对象。
如果不存在就会创建

1 if (tiptype == 2) {
2 if ($(this).parent().next().find(".Validform_checktip").length == 0) {
3 $(this).parent().next().append("<span class='Validform_checktip' />");
4 $(this).siblings(".Validform_checktip").remove();
5 }
6 }

               

3也是代表的侧边提示,不过它是会在当前元素的siblings对象中查找显示提示信息的对象
同样也是不存在就会创建

1 if (tiptype == 3) {
2 if ($(this).siblings(".Validform_checktip").length == 0) {
3 $(this).parent().append("<span class='Validform_checktip' />");
4 $(this).parent().next().find(".Validform_checktip").remove();
5 }
6 }

               

4也是侧边显示会在当前元素的父级的next对象下查找显示提示信息的对象
还可以传入自定义函数,实现你想要的提示效果。

以上就是我认为validform.js中需要注意的事情和使用方法的展示,欢迎讨论,拍砖。
 
 
标签: jquery表单验证

validform.js使用方法的更多相关文章

  1. 表单验证之validform.js使用方法

    一.validform有什么用? 网页上有大量的input需要你进行验证的时候,如果是弹窗的话,需要不停地判断,如果为空,弹窗.如果不是数字,弹窗. 所以要将这么多验证交给一个js去验证. 二.我现在 ...

  2. js调用php和php调用js的方法举例

    js调用php和php调用js的方法举例1 JS方式调用PHP文件并取得php中的值 举一个简单的例子来说明: 如在页面a.html中用下面这句调用: <script type="te ...

  3. 通过cookie实现搜索框内容保存关闭浏览器之前的操作、jq js实现方法

    jq实现的方法: jq需要在页面中引入JQ.cookie插件 这是一个超轻量级插件 要实现的效果: 下面是jq代码: $(function(){ var til=$("#orderInfoC ...

  4. jquery.validate.min.js 用法方法示例

    页面html 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  5. jQuery 互相调用iframe页面中js的方法

    1,子iframe内调用父类函数方法: window.parent.func(); 2,子Iframe中获取父界面的元素: $("#xx", window.parent.docum ...

  6. JS扩展方法——字符串trim()

    转自:http://www.cnblogs.com/kissdodog/p/3386480.html <head> <title>测试JS扩展方法</title> ...

  7. Js apply 方法 详解

    Js apply方法详解 我在一开始看到JavaScript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这 ...

  8. JavaScript基础12——js的方法重载

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. JS replace()方法-字符串首字母大写

    replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. replace()方法有两个参数,第一个参数是正则表达式,正则表达式如果带全局标志/g,则是代表替换 ...

随机推荐

  1. Debug with Eclipse

    In this post we are going to see how to develop applications using Eclipse and Portofino 4. The trad ...

  2. SpringMVC 上下文webApplicationContext

    使用listener听众载入配置,一般Struts+Spring+Hibernate是使用listener监听器的.例如以下 <listener> <listener-class&g ...

  3. 自己写的sql排序

    create function dbo.Fn_Sort (  @str varchar(1024) ) returns nvarchar(100) as begin declare @tb table ...

  4. 逆向wireshark学习SSL协议算法(转)

    小贴士:SSL协议的定义 SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整 ...

  5. CareerCup它1.8 串移包括问题

    [称号] 原文: 1.8 Assume you have a method isSubstring which checks if one word is a substring of another ...

  6. MySQL与逻辑模块

    启动MySQL 1.初始化模块运行&&存储引擎初始化运行 2.1中运行完毕后 ---->连接管理模块接手 3.连接管理模块启动处理client连接请求的监听程序(tcp/ip 网 ...

  7. 连接字符串中Min Pool Size的理解是错误,超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    Min Pool Size的理解是错误的 假设我们在一个ASP.NET应用程序的连接字符串中将Min Pool Size设置为30: <add name="cnblogs" ...

  8. NGUI判断是否点击到UI控件

    注意:UI应加上Box Collider 1.射线检测 UICamera发一条射线,射线碰到了东西就说明点击到了UI Ray ray=UICamera.mainCamera.ScreenPointTo ...

  9. iOS 辛格尔顿

    单例模式: 为什么使用单例,单例模式的用途是什么?以下我们举一个样例来诠释一下 举个大家都熟知的样例--Windows任务管理器,如图,我们能够做一个这种尝试,在Windows的"任务栏&q ...

  10. 国内外MD5在线解密网站

    -http://www.cmd5.com/english.aspx (457,354,352,282) - http://www.md5crack.com - http://www.hashcheck ...