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

一.validform有什么用?

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

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

1.jquery.validat.js

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

  1. $("#btnAdd").on("click", function() {
  2. $("#validateform").submit();
  3. });
  4. $("#validateform").validate({
  5. rules: {
  6. txtUrl: {
  7. required: true,
  8. url: true //确定是不是url
  9. },
  10. txtRequired: {
  11. required: true
  12. }
  13. },
  14. submitHandler: function(form) {
  15. addNewAd();
  16. }
  17. });

           

在网上好像还有配合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. 1 beforeCheck: function(curform) {
  2. 2 $("#sliderAd ul").each(function() {
  3. 3 var needIgnore = true;
  4. 4 var _this = $(this);
  5. 5 var checkList = _this.find("input[class*=AllNeedOrEmpty]");
  6. 6 checkList.each(function() {
  7. 7 var that = $(this);
  8. 8 if (that.val() != "") {
  9. 9 checkList.each(function() {
  10. 10 $(this).removeAttr("ignore");
  11. 11 });
  12. 12 needIgnore = false;
  13. 13 }
  14. 14 });
  15. 15 if (needIgnore) {
  16. 16 checkList.each(function() {
  17. 17 $(this).attr("ignore", "ignore");
  18. 18 });
  19. 19 }
  20. 20 });
  21. 21 },

               

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

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

       

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

3.初始化参数

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

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

               

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

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

               

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

  1. 以上就是我认为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. 王立平--Unity综上所述控制

    GUILayout   Label 创建一个自己主动布局的标签. Box 创建一个自己主动布局的box. Button 创建一个单次button.当用户点击button会马上发生一些事件. Repea ...

  2. ASP.NET MVC源码分析

    MVC4 源码分析(Visual studio 2012/2013) HttpModule中重要的UrlRoutingModule 9:this.OnApplicationPostResolveReq ...

  3. Android_declare-styleable_自己定义控件的属性

    1.简单实例 (1).在res/values文件下定义一个attrs.xml文件 <? xml version="1.0" encoding="utf-8" ...

  4. 玩转html5(二)----用canvas结合脚本在画布上画简单的图(html5又一强大功能)

    在html5中可以使用canvas标签在画布上画图,先直接上代码,这篇文章先简单介绍一下canvas的使用方法,简单画几个圆,矩形,三角形,写字. 在代码中均给出了注释,在这里特别强调的一点是:使用c ...

  5. hdu1004----用java链表实现

    Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  6. leetcode第一刷_Maximum Depth of Binary Tree

    这道题预计是ac率最高的一道了.你当然能够用层序遍历,我佩服你的耐心和勇气.由于看到别人的三行代码,会不会流眼泪呢.. class Solution { public: int maxDepth(Tr ...

  7. Android-管理Activity生命周期 -停止和重启Activity

    停止和重启activity在activity的生命周期中很重要,它能让用户感觉你的app总是激活的而且不会丢失他们的进度.activity在下面的这些情况会停止和重启: 用户打开常用app窗口然后从你 ...

  8. Palindromes&nbsp;_easy&nbsp;version

    Time Limit: 1Sec  MemoryLimit: 64 MB Submit:165  Solved: 76 [Submit][Status][WebBoard] Description & ...

  9. Namespace:Openstack的网络实现

    前言:众所周知在linux系统中PID.IPC.Network等都是全局性的资源,不论什么的改动和删减都会对整个系统造成影响.这也是为什么kvm之类的虚拟化技术须要模拟一个完毕主机系统的原因. 可是. ...

  10. 正确openvSwitch不同种类port认识

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdm9uemhvdWZ6/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...