validform表单验证的实现⽅法
validform插件主要把所有的验证条件和验证提⽰信息绑定到每个表单元素,这种形式⾮常⽅便,下⾯写法更加智能得到label内容来提⽰
validform有什么⽤?
⽹页上有⼤量的input需要你进⾏验证的时候,如果是弹窗的话,需要不停地判断,如果为空,弹窗。如果不是数字,弹窗。
所以要将这么多验证交给⼀个js去验证。
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\$/",
这个表达式的意思是:可以是⼿机号码;或者是邮箱地址,但字符长度必须在4到18位;或者是3到6位的字母,不区分⼤⼩写;或者输⼊ validform.rjboy,区分⼤⼩写。这⾥","分隔相当于逻辑运算⾥的"&&"; "|"分隔相当于逻辑运算⾥的"||";不⽀持括号运算。
2.ignore
绑定了ignore="ignore"的表单元素,在有输⼊时,会验证所填数据是否符合datatype所指定数据类型,没有填写内容时则会忽略对它的验证;
如何在表单中控制如果某⼏项要填都填,要不填都不填。
对这⼏项赋给相同的class ⽐如AllNeedOrEmpty
之后在初始化参数中的beforeCheck部分对这个class做操作,具体代码如下
beforeCheck: function(curform) {
$("#sliderAd ul").each(function() {
var needIgnore = true;
var _this = $(this);
var checkList = _this.find("input[class*=AllNeedOrEmpty]");
checkList.each(function() {
var that = $(this);
if (that.val() != "") {
checkList.each(function() {
$(this).removeAttr("ignore");
});
needIgnore = false;
}
});
if (needIgnore) {
checkList.each(function() {
$(this).attr("ignore", "ignore");
});
}
});
},
上⾯的代码只是提供⼀个思路,肯定有更好的⽅法,
⽐如使⽤validform对象中的ignore⽅法和unignore⽅法,通过向这两个⽅法传⼊表单元素来忽略和重新获取验证效果。
不过这两种⽅法是对元素赋给和去掉dataIgnore来实现验证与否。
源码如下:
ignore: function(selector) {
var obj = this;
var selector = selector || "[datatype]"
$(obj.forms).find(selector).each(function() {
$(this).data("dataIgnore", "dataIgnore").removeClass("Validform_error");
});
return this;
},
unignore: function(selector) {
var obj = this;
var selector = selector || "[datatype]"
$(obj.forms).find(selector).each(function() {
$(this).removeData("dataIgnore");
});
return this;
},
我的⽅法是控制ignore这个attr,⽽validform⽅法则是在元素上利⽤data⽅法来实现是否验证,思路基本⼀致,但是当元素是动态⽣成的时候我觉得还是ignore=ignore这个⽅法⽐较好,因为省事啊。
欢迎评论相互探讨。
3.初始化参数
如下是官⽹例⼦中给出的所有的可⽤参数
$(".demoform").Validform({
btnSubmit: "#btn_sub", //提交按钮
btnReset: ".btn_reset",
tiptype: 1, //
ignoreHidden: false,
dragonfly: false,
tipSweep: true,
label: ".label",
showAllError: false,
postonce: true,
ajaxPost: true,
datatype: {
"*6-20": /^[^\s]{6,20}$/,
"z2-4": /^[\u4E00-\u9FA5\uf900-\ufa2d]{2,4}$/,
"username": function(gets, obj, curform, regxp) {
//参数gets是获取到的表单元素值,obj为当前表单元素,curform为当前验证的表单,regxp为内置的⼀些正则表达式的引⽤;
var reg1 = /^[\w\.]{4,16}$/,
reg2 = /^[\u4E00-\u9FA5\uf900-\ufa2d]{2,8}$/;
if (st(gets)) {
return true;
}
if (st(gets)) {
return true;
}
return false;
//注意return可以返回true 或 false 或字符串⽂字,true表⽰验证通过,返回字符串表⽰验证失败,字符串作为错误提⽰显⽰,返回false则⽤errmsg或默认的错误提⽰;
},
"phone": function() {
// 5.0 版本之后,要实现⼆选⼀的验证效果,datatype 的名称不需要以 "option_" 开头;
}
},
usePlugin: {
swfupload: {},
datepicker: {},
passwordstrength: {},
jqtransform: {
selector: "select,input"
}
},
beforeCheck: function(curform) {
//在表单提交执⾏验证之前执⾏的函数,curform参数是当前表单对象。
//这⾥明确return false的话将不会继续执⾏验证操作;
},
beforeSubmit: function(curform) {
//在验证成功后,表单提交前执⾏的函数,curform参数是当前表单对象。
//这⾥明确return false的话表单将不会提交;
},
callback: function(data) {
//返回数据data是json对象,{"info":"demo info","status":"y"}
/
/info: 输出提⽰信息;
//status: 返回提交数据的状态,是否提交成功。如可以⽤"y"表⽰提交成功,"n"表⽰提交失败,在ajax_post.php⽂件返回数据⾥⾃定字符,主要⽤在callback函数⾥根据该值执⾏相应的回调操作;
//你也可以在ajax_post.php⽂件返回更多信息在这⾥获取,进⾏相应操作;
//ajax遇到服务端错误时也会执⾏回调,这时的data是{ status:**, statusText:**, readyState:**, responseText:** };
//这⾥执⾏回调操作;
//注意:如果不是ajax⽅式提交表单,传⼊callback,这时data参数是当前表单对象,回调函数会在表单验证全部通过后执⾏,然后判断是否提交表单,如果callback⾥明确return false,则表单不会提交,如果return true或没有return,则会提交表单。  }
});
3.1 如何使⽤ajax提交数据,⽽不提交表单。
beforeSubmit: function (curform) {
addNewAd();
return false;
//这⾥明确return false的话表单将不会提交;
}
直接在beforeSubmit中加上对应的ajax提交函数,并加上return false就可以保证表单不会被提交⽽执⾏我们的ajax函数。
3.2 tiptype
⽤来设置提⽰信息的展⽰⽅式,可⽤的值有:1、2、3、4和function函数,默认tiptype为1。
1代表⾃定义弹出框提⽰。
2代表侧边提⽰,会在当前元素的⽗级的next对象的⼦级查显⽰提⽰信息的对象。
如果不存在就会创建
if (tiptype == 2) {
if ($(this).parent().next().find(".Validform_checktip").length == 0) {
$(this).parent().next().append("<span class='Validform_checktip' />");
$(this).siblings(".Validform_checktip").remove();
}
}
3也是代表的侧边提⽰,不过它是会在当前元素的siblings对象中查显⽰提⽰信息的对象
同样也是不存在就会创建
if (tiptype == 3) {
if ($(this).siblings(".Validform_checktip").length == 0) {
$(this).parent().append("<span class='Validform_checktip' />");
$(this).parent().next().find(".Validform_checktip").remove();
}
}
4也是侧边显⽰会在当前元素的⽗级的next对象下查显⽰提⽰信息的对象
还可以传⼊⾃定义函数,实现你想要的提⽰效果。
validform实例
【1】引⼊js脚本:
<link href="${ctx}/assets/css/validform.css" rel="external nofollow" rel="stylesheet" type="text/css" />
<script src="${ctx}/assets/js/validform_min.js"></script>
【2】html:
<form action="$segmentfault/a/1190000018426565/insert" class="form-horizontal form-bordered" method="post" id="validform">
<div class="form-group">
<label class="control-label col-md-3">类型</label>
<div class="col-md-4">
<select class="form-control" data-width="100%" name="equipment.categoryId" id="equipmentCategory">
<option value="">--请选择--</option>
<c:forEach items="${equipmentCategoryList}" var="obj">
<option value="${obj.id}" <c:if test="${obj.id eq equipment.categoryId }">selected</c:if> >${obj.name}</option>        </c:forEach>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3">设备名称</label>
<div class="col-md-4">
<input class="form-control inputxt" type="text" value="${equipment.name}" name="equipment.name"/>
</div>
</div>
</form>
【3】js脚本:
// 添加验证
$(function(){
var demo=$("#validform").Validform({//指明是哪⼀表单需要验证,名称需加在form表单上;
tiptype:3
,
label:".control-label"
,showAllError:true
,ignoreHidden:true
,datatype:{
"zh1-6":/^[\u4E00-\u9FA5\uf900-\ufa2d]{1,6}$/
,"Aa1":/^[A-Za-z0-9]+$/
}
});
demo.addRule([
{
ele:".inputxt"
,
datatype:"*1-256"
},
{
ele:"select"//<option value="">--请选择--</option>,这⼀项的值为空,否则⽆效
,datatype:"*"//也可以写到input标签⾥
}
]);
// 阻⽌表单提交(这是⼀种形式,因为还没到两者⽐较时候的判断)
$("#submit").click(function(event) {
var highest = $("#highest").val();
var lowest = $("#lowest").val();
jquery插件分享
if(highest <= lowest){
alert("最⾼层熟不能⼩于最低层数");
return false;// 禁⽌提交
}
if(lowest > 2){
alert("最低层数不能⼤于1");
return false;
}
});
})
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。