nice Validator使用文档:http://niceue.com/validator/

一、自定义验证规则:

//大类表单新增修改验证提交
$("#addbigCategory").validator({
theme :"simple_bottom",
rules:{
coursecatename :[/^[\w\u4e00-\u9fa5]+$/,'不能包含特殊字符'], //匹配中文、数字、字母、下划线
},
fields: {
coursecatename: "类别名称:required;length[1~50];coursecatename;"//,
//sortIndex:"序号:required;"
},
valid: function(form){
var tname=$(".dialog_title").text();
if(tname.indexOf("修改")>=0){
//修改保存
SaveEditBigCourseCate();
}else{
//新增保存
SaveAddBigCourseCate();
} }
});
      //新增修改 验证提交
$("#addCategory").validator({//form表单
theme :"simple_bottom",
rules:{
           //自定义验证规则
name :[/^[\w\u4e00-\u9fa5]+$/,'不能包含特殊字符'], //匹配中文、数字、字母、下划线
sortIndexOnly:function(){}, //sortIndex去重检索
nameOnly:function(){},//name去重检索
},
message:{
required:"该项为必填项",
},
fields: {
name:"类别名称:required;length[1~50];name;",
},
valid: function(form){
var tname=$(".dialog_title").text();
if(tname.indexOf("修改")>=0){
SaveEditTeacherCate(); //修改保存
}else{
SaveAddTeacherCate(); //新增保存
}
}
});
     <form id="addCategory">
<div class="dialog_body">
<div class="formula_itemlist">
<ul class="itemwindow">
<!-- <li><span>序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</span></li> -->
<input type="hidden" id="teachersortindex" name="sortIndex" placeholder="请填数字"/>
<li><span>类别名称:</span>
<input type="text" id="teachercatename" name="name" placeholder="50字以内"/>
</li>
<input type="hidden" id="teachercateid" name="id" />
</ul> </div>
</div>
<div class="dialog_bottom">
<button type="button" id="cancel">取消</button>
<button type="submit">保存</button>
</div>
</form>

效果如图:

二、销毁验证信息:

1、修改时,第一次输入错误信息,出现验证提示信息后,再输入正确信息,回车修改成功;

2、然后在弹出修改窗口时,会显示验证错误提示信息,如下图所示:

  

  

解决这个BUG方法:在回车提交表单时,加入销毁验证信息事件:

JS代码:

 //新增课程大类弹窗
$("#addbutton").on("click",function(obj){
$(".dialog_title").text("新增一级分类");
addWin.showPopup();
});
//新增课程子类弹窗
$("#rightaddbutton").on("click",function(obj){
$(".dialog_title").text("新增二级分类");
addSmallWin.showPopup();
var pname = $("#parentId").val();
if(pname!=""){
$("#pname").val(pname); //父类
}
}); //大类表单新增修改验证提交
$("#addbigCategory").validator({
theme :"simple_bottom",
rules:{
coursecatename :[/^[\w\u4e00-\u9fa5]+$/,'不能包含特殊字符'], //匹配中文、数字、字母、下划线
},
fields: {
coursecatename: "类别名称:required;length[1~50];coursecatename;"//,
//sortIndex:"序号:required;"
},
valid: function(form){
var tname=$(".dialog_title").text();
if(tname.indexOf("修改")>=0){
//修改保存
SaveEditBigCourseCate();
}else{
//新增保存
SaveAddBigCourseCate();
}
}
}); //小类表单新增修改验证提交
$("#addsmallCategory").validator({
theme :"simple_bottom",
rules:{
sonname :[/^[\w\u4e00-\u9fa5]+$/,'不能包含特殊字符'], //匹配中文、数字、字母、下划线
},
fields: {
pname: "类别名称:required;",
//coursesortindex:"序号:required;",
sonname:"类别名称:required;length[1~50];sonname;"
},
valid: function(form){
var tname=$(".dialog_title").text();
if(tname.indexOf("修改")>=0){
//修改保存
SaveEditSmallCourseCate();
}else{
//新增保存
SaveAddSmallCourseCate();
}
}
});
    //保存大类
function SaveAddBigCourseCate(){
var name = $.trim($("#coursecatename").val());
var sortIndex=$("#sortIndex").val();
var param={name:name,sortIndex:sortIndex}; $.ajax({
url:"${ctx}/td/courseType/checkCourseType.do",
type:"get",
data:param,
success:function(data){
if(data=="ok"){
$.ajax({
url:"${ctx}/td/courseType/insert.do",
type:"get",
data:param,
success:function(data){
if(data.result=="true"){
new AlertWin().initfn({
"tipscon":data.resultDesc,
"showtime":2000
});
$("#addbigCategory")[0].reset();
addWin.close();
loadBigData();
}else{
new AlertWin().initfn({
"tipscon":data.resultDesc,
"showtime":2000
});
}
}
});
}else{
addWin.close();
new AlertWin().initfn({
"tipscon":'新增失败,该课程类别已存在!',
"showtime":2000
});
}
}
});
//销毁验证信息,防止回车提交后,再次弹出时出现验证提示信息
$("#addbigCategory").validator("destroy"
);
} //保存小类
function SaveAddSmallCourseCate(){
var sortIndex=$("#coursesortindex").val();
var pid= $("#pname").val();
var sonname = $.trim($("#sonname").val());
console.log();
var param={sortIndex:sortIndex,parentId:pid,name:sonname}; $.ajax({
url:"${ctx}/td/courseType/checkCourseType.do",
type:"get",
data:param,
success:function(data){
if(data=="ok"){
$.ajax({
url:"${ctx}/td/courseType/insert.do",
type:"get",
data:param,
success:function(data){
if(data.result=="true"){
new AlertWin().initfn({
"tipscon":data.resultDesc,
"showtime":2000
});
$("#addsmallCategory")[0].reset();
addSmallWin.close();
loadSmallData();
}else{
new AlertWin().initfn({
"tipscon":data.resultDesc,
"showtime":2000
});
}
}
});
}else{
addSmallWin.close();
new AlertWin().initfn({
"tipscon":'新增失败,该课程类别已存在!',
"showtime":2000
});
}
}
});
//销毁验证信息,防止回车提交后,再次弹出时出现验证提示信息
$("#addsmallCategory").validator("destroy"
);
}

HTML代码:

<!--新增课程大类-->
<div class="dialog_coursecategory" id="addDialog" style="width: 350px;">
<div class="dialog_title" data-operateType="add">新增一级分类</div>
<form id="addbigCategory">
<div class="dialog_body" style="height:100px;">
<div class="formula_itemlist">
<ul class="itemli">
<!-- <li><span>序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</span></li> -->
<input type="hidden" id="sortIndex" name="sortIndex" placeholder="请填数字"/>
<li><span>类别名称:</span><input type="text" id="coursecatename" data-id="id" name="coursecatename" placeholder="50字以内"/></li>
<input type="hidden" id="coursecatecorpId" name="corpId" />
</ul>
</div>
</div>
<div class="dialog_bottom">
<button type="button" id="cancel1">取消</button>
<button type="submit">保存</button>
</div>
</form>
</div> <!--新增课程子类 -->
<div class="dialog_coursecategory" id="addsmallDialog" style="width: 350px;">
<div class="dialog_title" data-operateType="add">新增二级分类</div>
<form id="addsmallCategory">
<div class="dialog_body">
<div class="formula_itemlist">
<ul class="itemli">
<!-- <li><span>序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</span> -->
<input type="hidden" id="coursesortindex" name="coursesortindex" placeholder="请填数字"/></li>
<li><span>父类名称:</span><select id="pname" name="pname" placeholder="1~100字以内"/></select></li>
<li><span>类别名称:</span><input type="text" id="sonname" data-id="id" name="sonname" placeholder="50字以内"/></li>
<input type="hidden" id="soncorpId" name="corpId" />
</ul>
</div>
</div>
<div class="dialog_bottom">
<button type="button" id="cancel2">取消</button>
<button type="submit">保存</button>
</div>
</form>
</div>

 二、解决新增、修改弹窗时,验证不通过,第一次提交失败,第二次提交却可以(在弹出提示信息后面加 return;)

//新增修改 验证提交
function createBig(){
$("#formId").validator({
theme :"simple_bottom",
rules:{
name :[/^[\w\u4e00-\u9fa5]+$/,'不能包含特殊字符'], //匹配中文、数字、字母、下划线
sortIndexOnly:function(){}, //sortIndex去重检索
nameOnly:function(){},//name去重检索
},
fields: {
name:"姓名:required;length[1~30];name;",
title:"等级:length[0~30];name;",
phone:"电话:required;mobile;",
email:"邮箱:length[0~50];email;",
proField:"length[0~200];",
intro:"length[0~200];"
},
valid: function(form){
var tname = $(".dialog_title").text();
var headImg = $("#head_img").attr("data-img");
if(headImg=="head_default.jpg"){
headImg=null;
} if(tname.indexOf("修改")>=0){
//修改保存
var labels = "";
var index = 0;
$(".labels").find("li").each(function(){
if(index==0){
labels += "'" + $(this).attr("data-id") + "'";
}else{
labels += ",'"+$(this).attr("data-id") + "'";
}
index++;
}); var param={id:$("#id").val(),headImg:headImg,name:$.trim($("#name").val()),title:$.trim($("#title").val()),phone:$.trim($("#phone").val()),email:$.trim($("#email").val()),proField:$.trim($("#proField").val()),trainerTypeId:$("#trainerTypeId_add").val(),intro:$.trim($("#intro").val()),labels:labels };
var param_a = {name:$.trim($("#name").val()),phone:$.trim($("#phone").val()),id:$("#id").val() };
$.ajax({
url:"${ctx}/td/trainer/checkTrainer.do",
type:"get",
cache:false,
data:param_a,
success:function(data){
if(data=="ok"){
$.ajax({
url:"${ctx}/td/trainer/modify.do",
type:"get",
data:param,
success:function(data){
if(data.result=="true"){
new AlertWin().initfn({
"tipscon":data.resultDesc,
"showtime":2000
});
$("#formId")[0].reset();
addWin.close();
}else{
new AlertWin().initfn({
"tipscon":data.resultDesc,
"showtime":2000
});
return; //防止提交一次失败,二次提交却可以
}
$("#searchbtn").trigger("click");
getLabels();
}
});
}else{
new AlertWin().initfn({
"tipscon":'修改失败,该讲师已存在!',
"showtime":2000
});
return; //防止提交一次失败,二次提交却可以
} //销毁验证信息,防止回车提交后,再次弹出时出现验证提示信息
$("#formId").validator("destroy");
}
}); }else{
//新增
var labels = "";
var index = 0;
$(".labels").find("li").each(function(){
if(index==0){
labels += "'" + $(this).attr("data-id") + "'";
}else{
labels += ",'"+$(this).attr("data-id") + "'";
}
index++;
}); var param={headImg:headImg,name:$.trim($("#name").val()),title:$.trim($("#title").val()),phone:$.trim($("#phone").val()),email:$.trim($("#email").val()),proField:$.trim($("#proField").val()),trainerTypeId:$("#trainerTypeId_add").val(),intro:$.trim($("#intro").val()),labels:labels }; var param_a = {name:$.trim($("#name").val()),phone:$.trim($("#phone").val()) };
$.ajax({
url:"${ctx}/td/trainer/checkTrainer.do",
type:"get",
cache:false,
data:param_a,
success:function(data){
if(data=="ok"){
$.ajax({
url:"${ctx}/td/trainer/insert.do",
type:"get",
cache:false,
data:param,
success:function(data){
if(data.result=="true"){
new AlertWin().initfn({
"tipscon":data.resultDesc,
"showtime":2000
});
$("#formId")[0].reset();
addWin.close();
}else{
new AlertWin().initfn({
"tipscon":data.resultDesc,
"showtime":2000
});
return; //防止提交一次失败,二次提交却可以
}
$("#searchbtn").trigger("click");
getLabels();
}
});
}else{
new AlertWin().initfn({
"tipscon":'新增失败,该讲师已存在!',
"showtime":2000
});
return; //防止提交一次失败,二次提交却可以
} //销毁验证信息,防止回车提交后,再次弹出时出现验证提示信息
$("#formId").validator("destroy");
}
}); } }
});
} //弹出新增窗口
function addTeacher() { var html=" <i class='iconfont closeWin' id='close_add'></i>";
$("#addDialog").find(".dialog_title").attr("data-operateType","add").html("新增").append(html); $("#addtag-cancel").trigger("click"); //恢复未点击状态
//头像
$("#head_img").attr("src","${ctx}/static/images/common/head_default.jpg");
$("#head_img").attr("data-img","head_default.jpg");
$("#labels li").remove();//清空标签
$("#trainerTypeId_add option:selected").attr("selected",false);//清空下拉框选中项 addWin.showPopup();
$("#close_add").on("click",function(){
$("#formId")[0].reset();
addWin.close();
}); createBig(); //初始化验证信息 upLoadPic();
} //弹出修改窗口
function editTeacher() {
var selectObj = table.selectedRowsIndex();
var selectItem = table.row(selectObj[0]); if(selectObj.length==0){
new AlertWin().initfn({
"tipscon":"请先选择数据!",
"showtime":2000
});
}else if(selectObj.length>1){
new AlertWin().initfn({
"tipscon":"只能选择一条数据进行修改!",
"showtime":2000
});
}else if(selectObj.length==1){
$("#formId").fill(selectItem);
var html=" <i class='iconfont'id='close_edit'></i>";
$("#addDialog").find(".dialog_title").attr("data-operateType","add").html("修改").append(html); $("#addtag-cancel").trigger("click"); //恢复未点击状态 $("#id").val(selectItem.id);
$("#name").val(selectItem.name);
$("#title").val(selectItem.title);
$("#recommend").val(selectItem.recommend); if(selectItem.trainerTypeId!=""){
$("#trainerTypeId_add").find("option[value="+selectItem.trainerTypeId+"]").attr("selected",true);
}
$("#phone").val(selectItem.phone);
$("#email").val(selectItem.email);
$("#proField").val(selectItem.proField);
$("#intro").val(selectItem.intro);
//头像
if(selectItem.headImg!=""){
$("#head_img").attr("src","${ctx}/upload/trainer_picture/"+selectItem.headImg);
$("#head_img").attr("data-img",selectItem.headImg);
}else{
$("#head_img").attr("src","${ctx}/static/images/common/head_default.jpg");
$("#head_img").attr("data-img","head_default.jpg");
} //标签
var trainerLabels = selectItem.labels;
$("#tagName").val("");
$("#labels li").remove();//清空标签 if(trainerLabels!=null){
$.ajax({
url:"${ctx}/td/trainer/queryLabelListByIds.do",
type:"get",
cache:false,
data:{trainerLabels : trainerLabels },
success:function(data){
var bean=data.beans;
var html="";
if(bean.length!=0){
for(var i=0;i<bean.length;i++){
var data=bean[i];
$(".labels").append("<li class='signli' data-id='"+data.id+"' data-trainerLabel='"+data.trainerLabel+"'><span>"+data.trainerLabel+"</span><i class='iconfont' onclick='delLable(this)'></i></li>");
}
}
}
}); } addWin.showPopup();
$("#close_edit").on("click",function(){
$("#formId")[0].reset();
addWin.close();
}); createBig(); //初始化验证信息 upLoadPic();
}
}

表单验证:nice Validator的更多相关文章

  1. jquery插件-表单验证插件-validator对象

    三 Validator对象 1.介绍:Validate方法返回的对象称作Validator对象 2.使用 Validator对象常用方法 Validator.form() 返回:Boolean 验证: ...

  2. jQuery 表单验证 jquery.validator.js

    前端开发中经常会碰到表单的制作,其中必备的功能就是提交前的一些简单的验证,非空啊.手机号码啊.E-mail等等等等,这里是一个 jQuery 的表单验证插件,蛮好用的,收录一下. 下面是验证的效果图: ...

  3. 表单验证插件-validator.js 使用教程

    做网站的时候,常常会涉及到各种表单验证.选择一款好用的表单验证插件,会降低表单验证开发的难度.在开发中,我目前使用的表单验证插件是:validator.js. validator.js 是一款轻量的表 ...

  4. 自定义表单验证--jquery validator addMethod的使用

    原文地址:jquery validator addMethod 方法的使用作者:蜡笔小玄 jQuery.validate是一款非常不错的表单验证工具,简单易上手,而且能达到很好的体验效果,虽然说在项目 ...

  5. layer,Jquery,validate实现表单验证,刷新页面,关闭子页面

    1.表单验证 //获取父层 var index = parent.layer.getFrameIndex(window.name); //刷新父层 parent.location.reload(); ...

  6. jquery 表单验证插件

    其他: <form action=""> First name: <input type="text" name="FirstNam ...

  7. Nice validator领先的表单验证解决方案 转

    Nice validator是一个简单智能的Web表单验证插件,可以验证现有的所有格式,比如邮箱地址.电话号码等,您还可以自定义规则验证,插件基于jQuery库,支持多种语言配置. 安装 1.您可以访 ...

  8. [php基础]PHP Form表单验证:PHP form validator使用说明

    在PHP网站开发建设中,用户注册.留言是必不可少的功能,用户提交的信息数据都是通过Form表单提交,为了保证数据的完整性.安全性,PHP Form表单验证是过滤数据的首要环节,PHP对表单提交数据的验 ...

  9. element-ui+vuex共享自定义方法进行表单验证 validator

    element-ui的官网上写的自定义表单验证,方法都是写在单vue文件中的,不容易共享.怎么使用vuex将方法共享出来,各个组件都能用呢? 如下是一个验证age的数据, rules:{ age:[{ ...

  10. angular4 自定义表单验证Validator

    表单的验证条件有时候满足不了需求就可以自定义验证 唯一要求返回是ValidatorFn export interface ValidatorFn{ (c:AbstractControl):Valida ...

随机推荐

  1. 第5章 Linux网络编程基础

    第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...

  2. 了解Python控制流语句——while 语句

    while 语句 Python 中 while 语句能够让你在条件为真的前提下重复执行某块语句. while 语句是 循环(Looping) 语句的一种.while 语句同样可以拥有 else 子句作 ...

  3. 【转】一款已上市MMO手游地图同步方案总结

    转自游戏开发主席 1. 客户端地图格子的相关知识 在2.5D的MMO游戏里,角色是通过3D的方式渲染,2D的地图是通过2D的方式显示,所以在客户端一般会有三个坐标系: a) 3D坐标系:所有需要3D渲 ...

  4. 【20180807模拟测试】tree

    题目描述 或许会传送失败的传送门 #分析 考虑如何才能让白边显得更(不)重要,即在每条白边上(加上)减去一个值. 我们可以二分这个值,然后用寻常方法做最小生成树.统计在此最小生成树里有多少白 边. 然 ...

  5. POJ 2826 An Easy Problem?!(线段交点+简单计算)

    Description It's raining outside. Farmer Johnson's bull Ben wants some rain to water his flowers. Be ...

  6. Martin Fowler关于IOC和DI的文章(原版)

    Inversion of Control Containers and the Dependency Injection pattern In the Java community there's b ...

  7. mysql入门 — (1)

    使用cd进入到mysql/bin文件夹下面,或者配置完环境之后,直接在cmd中使用mysql,然后回车开启mysql. 登录 为了安全考虑,在这里只设置了本地root用户可以连接上数据库.使用的指令是 ...

  8. iOS- UIPickerView餐厅点餐系统

    在餐厅里的点餐系统的核心控件就是UIPickerView 今天晚上在整理以前的项目笔记时,特意把UIPickerView单独拿出来,做了一个简陋的点餐道具. 因为没有素材图片,所有大家将就看看吧 0. ...

  9. PAT 甲级 1128 N Queens Puzzle

    https://pintia.cn/problem-sets/994805342720868352/problems/994805348915855360 The "eight queens ...

  10. django设置首页

    1.在views中添加一个def 为homepage basepath=os.getcwd()+'\\dockerApp\\app\\templates\\';def homepage(request ...