经常要做一些表单验证的操作,每次都是用现成的框架,比如jquery,bootstrap等的验证插件,虽然也很强大,也很好用,可就是用起来需要引入许多js库,还有里面功能太多,感觉不太符合自己的需求。最近工作不太忙,便在网上搜了一些资料,也借用了jquery的一些源码,自己做了这个表单验证js。

一  功能介绍

1 总结众多验证插件的一些使用经验,我这个js只做验证,不进行表单submit提交,或者ajax提交等额外操作。众多的插件都是和提交功能封装在一起,感觉使用起来似有画蛇添足之嫌。这套js验证后至返回true,false状态,然后调用者可判断状态自己结合本身业务逻辑实现操作,这样用户可控性相对较好。

2 这个版本只提供名称,邮箱,手机号,身份证验证,如果自己能读懂源码的话,也可以根据实际需要进行扩展。

3 通过在input标签添加自定义属性来获取验证源数据,自定义属性key值要按源码要求写,保证和源码一一对应,从而能读取到源数据。

4 验证提示msg可自己在自定义属性的value里面自己定义,注意不要过长,提示弹框用的jquery的tips,目前不能调整宽度,太长会自动换行,影响用户体验。

5 该js不用引用任何外部js依赖库,引用的jquery代码已经粘贴到js代码内。

6 只依赖jquery,jquery库还是要引用的。

二  下面是代码

/**
* Author 赵荣磊
* 版权:赵荣磊 请尊重创作辛苦,引用时不要修改我的名字,本人联系电话13524929813
*
* */

;(function ($) {
var cnt = 0;//统计错误次数
/**
* jquery全局插件
*/
$.fn.extend({
checkValidy: function () {
// var current = $(this);
cnt = 0
$.validate("checkPhone",$.checkPhone);//验证手机
$.validate("checkName",$.checkName);//验证姓名
$.validate("checkIdcard",$.checkIdcard);//验证身份证
$.validate("checkEmail",$.checkEmail);//验证邮箱

if (cnt > 0) {
return false;
}else{
return true;
};
// $(current).submit();
},
tips:function(options){
var defaults = {
side:1,
msg:'',
color:'#FFF',
bg:'#F00',
time:2,
x:0,
y:0
}
var options = $.extend(defaults, options);
if (!options.msg||isNaN(options.side)) {
throw new Error('params error');
}
if(!$('#jquery_tips_style').length){
var style='<style id="jquery_tips_style" type="text/css">';
style+='.jq_tips_box{padding:10px;position:absolute;overflow:hidden;display:inline;display:none;z-index:10176523;}';
style+='.jq_tips_arrow{display:block;width:0px;height:0px;position:absolute;}';
style+='.jq_tips_top{border-left:10px solid transparent;left:20px;bottom:0px;}';
style+='.jq_tips_left{border-top:10px solid transparent;right:0px;top:18px;}';
style+='.jq_tips_bottom{border-left:10px solid transparent;left:20px;top:0px;}';
style+='.jq_tips_right{border-top:10px solid transparent;left:0px;top:18px;}';
style+='.jq_tips_info{word-wrap: break-word;word-break:normal;border-radius:4px;padding:5px 8px;max-width:130px;overflow:hidden;box-shadow:1px 1px 1px #999;font-size:12px;cursor:pointer;}';
style+='</style>';
$(document.body).append(style);
}
this.each(function(){
var element=$(this);
var element_top=element.offset().top,element_left=element.offset().left,element_height=element.outerHeight(),element_width=element.outerWidth();
options.side=options.side<1?1:options.side>4?4:Math.round(options.side);
var sideName=options.side==1?'top':options.side==2?'right':options.side==3?'bottom':options.side==4?'left':'top';
var tips=$('<div class="jq_tips_box" style="width:150px;"><i class="jq_tips_arrow jq_tips_'+sideName+'"></i><div class="jq_tips_info">'+options.msg+'</div></div>').appendTo(document.body);
tips.find('.jq_tips_arrow').css('border-'+sideName,'10px solid '+options.bg);
tips.find('.jq_tips_info').css({
color:options.color,
backgroundColor:options.bg
});
switch(options.side){
case 1:
tips.css({
top:element_top-tips.outerHeight()+options.x,
left:element_left-10+options.y
});
break;
case 2:
tips.css({
top:element_top-20+options.x,
left:element_left+element_width+options.y
});
break;
case 3:
tips.css({
top:element_top+element_height+options.x,
left:element_left-10+options.y
});
break;
case 4:
tips.css({
top:element_top-20+options.x,
left:element_left-tips.outerWidth()+options.y
});
break;
default:
}
var closeTime;
tips.fadeIn('fast').click(function(){
clearTimeout(closeTime);
tips.fadeOut('fast',function(){
tips.remove();
})
})
if(options.time){
closeTime=setTimeout(function(){
tips.click();
},options.time*1000);
tips.hover(function(){
clearTimeout(closeTime);
},function(){
closeTime=setTimeout(function(){
tips.click();
},options.time*1000);
})
}
});
return this;
}
});

/**
* jquery的全局方法
*/
$.extend({
validate:function(attrName,checkFun){
var o = $("["+attrName+"]");
var validator = $.makeArray(o);
var msg = o.attr(attrName);
$.each(validator, function (i) {
var obj = $(validator[i]);
console.log(obj);
if (!checkFun.call(this,obj.val())) {
cnt++;
obj.tips({
side: 3,
msg: msg,
bg: '#AE81FF',
time: 5
});
}
});
},
checkNumber: function (val){
var reg = /^[0-9]*[0-9][0-9]*$/;
if (val.trim() != ""&& reg.test(val)){
return true;
} else {
return false;
}
},
checkPhone: function (val){
var reg = /^1[3|4|5|7|8][0-9]\d{8}$/;
if (val.trim() != ""&& reg.test(val)){
return true;
} else {
return false;
}
},
checkName:function(val){
var reg = new RegExp("^[a-zA-Z0-9_.\u4e00-\u9fa5\s]*$");
if(val.trim() != ""&&reg.test(val)){
return true;
//alert('只能输入中文字母数字下划线点');
}else{
return false;
}
},
checkIdcard:function(val){
var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if(val.trim() != ""&&reg.test(val)){
return true;
}else{
return false;
}
},
checkEmail:function(val){
var reg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
if(val.trim() != ""&&reg.test(val)){
return true;
}else{
return false;
}
}
});
})(jQuery);

三 使用示例

<form name="signUpForm" class="form-horizontal m-t" id="commentForm">

<input id="linkmanname" type="text" class="form-control" name="linkmanname" checkName="姓名要合规">

<input id="phone" type="text" class="form-control" name="phone" checkPhone="请输入正确手机号">

<input id="idcard" type="text" class="form-control" name="idcard" checkIdcard="请输入合法身份证号(15或18位)">

<input id="email" type="text" class="form-control" name="email" checkEmail="请输入合法邮箱">

<input type="button" id="first" class="btn btn-primary" οnclick="tijiao1()">确认添加1</input>

</form>

function tijiao1(){
var issubmit = $("#commentForm").checkValidy();
console.log("issubmit:"+issubmit)
if(issubmit){
$("#commentForm").submit()
}
}

四 如果使用中遇到问题可以联系我!

转载于:https://www.cnblogs.com/zhaoblog/p/7649551.html

一个自己实现的js表单验证框架。相关推荐

  1. 手把手教你自己写一个js表单验证框架

    其实我自己也就能简单用用js而已,但是呢,相对很多初学者来说多懂了点Know How所以斗 胆孟浪一下,将一些所得记录下来,以供更多的初学者能够知道一个东西的实现过程,省去 在源码里摸索的过程. 在表 ...

  2. anjular.js表单验证实例

    应用声明,控制器 <form action="" method="post" id="myForm" name="logFo ...

  3. 通用的JS表单验证插件代码

    一个通用的JS表单验证插件代码.使用方法:第一步:需设定表单项数据类型,第二步:实例表单验证,验证错误提示说明(程序有自带相关错误提示,可自定义每项验证错误提示时文本,只需添加msg). [task] ...

  4. 掌财社:html5中AmazeUI框架中JS表单验证实战案例展示!

    今天和大家分享个有关于"html5中AmazeUI框架中JS表单验证实战案例展示!"这方面的相关内容知识,让大家对于html5中AmazeUI框架也可以有所了解! 1.需求 做一个 ...

  5. JS表单验证(HTML+CSS+JS)详细教程

    大家好,今天分享一个HTML+CSS+JS表单验证,这是我前两天学习的一个小demo,在这记录一下. 目录 一.效果图 二.介绍 三.代码 (1)HTML (2)CSS (3)JavaScript J ...

  6. js表单验证(常用的正则表达式)

    js表单验证的正则表达式,test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false. 语法:let reg=/正则表达式主体/修饰符(可 ...

  7. JS表单验证-12个常用的JS表单验证

    JS表单验证-12个常用的JS表单验证 表单验证,小编在项目完结后的这段时间把常用的JS表单验证demo整理了一下,和大家一起分享~~~ 1.长度限制 <p>1. 长度限制</p&g ...

  8. js表单验证密码(确认密码),密码长度至少8位,并且英文与数字组合

    js表单验证密码(确认密码) 案例需求:在注册时,输入密码对其进行密码强度验证,并判断两次输入的密码是否一致.例如,密码长度至少8位,并且英文与数字组合. 代码实现 <p>输入密码:< ...

  9. 分享21个JS抽奖转盘特效,36个JS表单验证,31个JS进度条,总有一款适合您

    分享21个JS抽奖转盘特效,36个JS表单验证,31个JS进度条,总有一款适合您 下载链接:https://pan.baidu.com/s/1TWOGqes5J2baelO9qdItXg?pwd=ma ...

  10. jQuery Validate表单验证框架详解

    jQuery表单验证框架总结 jQuery Validate验证框架详解 jQuery校验官网地址:bassistance.de » jQuery plugin: Validation 一.导入js库 ...

最新文章

  1. 解决浏览器保存密码自动填充问题
  2. Freemarker商品页面静态化
  3. 【Linux】Linux中at命令详解
  4. 2018年一线互联网公司Java高级面试题总结
  5. Go 面试专题 | slice 扩容后的内存容量如何计算?
  6. java像sql一样处理数据_像Excel一样使用SQL进行数据分析
  7. 《构建之法》读后感二
  8. 求数组中k个数的所有组合
  9. 计算机内存小怎么改大,电脑内存太小的优化方法步骤
  10. ssm框架bean_Bean简介:简化的WordPress框架
  11. 债务美元是怎样“炼成”的
  12. 湖北刷脸支付:中国银联联合商业银行推出“刷脸付”产品
  13. AndroidTV语音搜索
  14. 面试的时候怎样自我介绍更有效果?
  15. chmod 命令详细用法
  16. c++ 调用python错误总结
  17. UnicodeEncodeError: ‘ascii‘ codec can‘t encode character ‘\u5bfc‘ in position 0: ordinal not in rang
  18. Win32:INI文件读写结构体/Int/String/遍历
  19. 除了Axure,还有哪些原型设计工具
  20. 2022年机修钳工(初级)考试题模拟考试题库及模拟考试

热门文章

  1. DH-SQL(学生信息表-课程表-选课表)
  2. 小程序如何cdn加速服务器,小程序能用cdn加速吗
  3. OSChina 周六乱弹 ——揭秘后羿怎么死的
  4. 自动驾驶(四十五)---------汽车标定-XCP简述
  5. 各种颜色十六进制代码表
  6. 使用nbsp;Windowsnbsp;Serveramp;nb…
  7. xinput1_3.dll丢失怎么修复win10_有什么好的修复方法推荐?
  8. 计算机excel四舍五入,如何在Excel中设置四舍五入
  9. java轿煤悝炾厍桴,最让人放心的汉字笔画序库.doc
  10. destoon平台供应或者商城详情页直接链接到会员的商铺上