一、三种情况下触发验证事件

  1. 输入框失去焦点 -> $('input[!type=button]').blur(function() {})
  2. 输入框输入中 -> $('input[!type=button]').bind('input propertychange', function() {})
  3. 点击提交表单时 -> $('input[type=button]').onclick(function(){ $.ajax({ }) })

表单HTML部分如下

<form id="signup_valid" name="signup_form"><a class="signup_btn_close" href="javascript:" onclick="signupLayer('signup_layer', false)"></a><h1 class="signup_top"><em class="l"></em>报名资料<em class="r"></em></h1><div class="signup_center"><div class="el"><input id="signup_city" class="in" name="signup_city" type="text" placeholder="城市" /></div><div class="el"><input id="signup_com" class="in" name="signup_com" type="text" placeholder="学校" /></div><div class="el"><input id="signup_name" class="in" name="signup_name" type="text" placeholder="联系人姓名" /></div><div class="el"><input id="signup_tel" class="in" name="signup_tel" type="text" placeholder="联系电话" /></div></div><div class="signup_bottom"><input id="signup_submit" class="signup_btn" type="button" value="立即报名" /></div>
</form>

二、表单验证及ajax异步提交数据JS

// 弹框弹出关闭事件
// 触发元素中加入onclick="signupLayer('弹框层ID', Boolean)"
// Boolean=>true 或 false, 弹出为true, 关闭为false
function signupLayer(el, dis) {var isShow = dis ? "block" : "none";// 获取弹框元素$("#" + el).css('display', isShow);// 遮罩层$("#layer_back_drop").css('display', isShow);
}// 定义待验证项
var validate = {signup_city: {required: true, // 必填项maxLength: 4  // 长度项},signup_com: {required: true,maxLength: 20},signup_name: {required: true,maxLength: 4},signup_tel: {required: true,mobile: true}/**待验证元素ID: {验证项: value}*/
};
// 定义错误信息提示
var msg = {signup_city: {required: '请输入城市',maxLength: '输入超出4个汉字'},signup_com: {required: '请输入学校名称',maxLength: '输入超出20个汉字'},signup_name: {required: '请输入姓名',maxLength: '输入超出4个汉字'},signup_tel: {required: '请输入手机号',mobile: '请输入正确的手机号'}/**待验证元素ID: {验证项: 错误提示信息}*/
};
// 定义验证方法
var methods = {// 必填项required: function(value) {// 去除首尾空格// !String.prototype.trim 用于兼容IE版本var v = !String.prototype.trim ? value.replace(/^\s+|\s+$/gm, '') : value.trim();// 为空返回false, 有值返回truereturn Boolean(v);},// 最大长度// value -> 输入的值;length => validate中定义的maxlength值maxLength: function(value, length) {// 去除首尾空格var v = !String.prototype.trim ? value.replace(/^\s+|\s+$/gm, '') : value.trim();// 匹配非中文字符,用于重新计算长度var chNon = v.match(/[^\u4E00-\u9FA5\uf900-\ufa2d]+/g) ? v.match(/[^\u4E00-\u9FA5\uf900-\ufa2d]+/g).join('') : '';// 匹配中文字符var ch = v.match(/[\u4E00-\u9FA5\uf900-\ufa2d]+/g) ? v.match(/[\u4E00-\u9FA5\uf900-\ufa2d]+/g).join('') : '';// 4个非中文字符按一个中文字符计算,相加换算最终长度var vLen = chNon.length + (ch.length * 4);// 小于限定长度则返回true,大于限定长度则返回falsereturn vLen <= length;},// 手机号码mobile: function(value) {// 去除空值var v = value.replace(/\s/g, "");// 手机号码的格式匹配var res = /^(0|86|17951)?(13[0-9]|15[012356789]|16[6]|19[89]]|17[01345678]|18[0-9]|14[579])[0-9]{8}$/;// 匹配一致则返回true,否则falsereturn res.test(v);}
};// 定义可调用的函数
function validEvent(e) {// 每次触发该事件前,若当前元素已有错误提示,则移除(避免重复返回错误提示信息)$(e).siblings('.error').remove(); var error = $('<label class="error"></label>'); // 创建错误提示信息容器var errorText; // 错误提示信息文本var key = e.id; // 当前触发元素的idvar len = validate[key].maxLength * 4;  // 当前触发元素的限定长度,非中文字符占4个中文字符长度var val = e.value; // 当前触发元素的输入值// 元素定义的验证项var rq = validate[key].required,mx = Boolean(validate[key].maxLength),ph = Boolean(validate[key].mobile);// 元素定义的验证处理事件var v_rq = methods.required(val),v_mx = methods.maxLength(val, len),v_ph = methods.mobile(val);/** 此处的判断逻辑待后续优化,感觉不是很美好 **/if (rq && !v_rq) {// 必填元素为空时执行errorText = msg[key].required;error.text(errorText);$(e).removeClass('valid')$(e).after(error);} else if (v_rq && mx && !v_mx) {// 元素不为空但长度超出限定执行errorText = msg[key].maxLength;error.text(errorText);$(e).removeClass('valid')$(e).after(error);} else if (v_rq && ph && !v_ph) {// 元素不为空,但不符合输入规范执行此errorText = msg[key].mobile;error.text(errorText);$(e).removeClass('valid')$(e).after(error);}// 为通过验证的元素添加validClass// 为后续提交表单检测提供服务// 感觉不是很美好,后续进行优化if ((v_rq && v_mx) || (v_rq && v_ph)) {var valid = $(e).hasClass('valid');if (!valid) $(e).addClass('valid');}}$(function() {// 获取表单中待验证的元素,排除input[type!=button]// 此次做的是非常简单的一个验证提交,只对input[type=text]进行验证var $valid = $('#signup_valid').find('input[type!=button]');// each循环执行$valid.each(function() {$(this).blur(function(){// 元素失去焦点后执行事件,validEvent(this);});$(this).bind('input propertychange', function(){// 元素值发生变化后执行事件,validEvent(this);});})// 点击提交$('#signup_submit').click(function() {var validAll = []; // 定义一个空数组,用于存储通过验证的元素项var data = {}; // 定义一个空对象,用于传输的数据值$valid.each(function() {// 循环执行validEvent(this);// 通过判断待验证的元素class是否具备valid// 具备valid则证明验证项通过输入正确,插入数组validAll中if ($(this).hasClass('valid')) {validAll.push(this.id);}var key = this.name; // 元素namevar value = this.value; // 元素输入的值data[key] = value; // 将每一个each循环到的元素插入对象data中})// 通过判断validAll数组长度与待验证项是否匹配,来确定表单是否通过验证,执行提交// $valid.length好像不太对,应该获取validateif (validAll.length == $valid.length) {// 通过则执行如下,ajax异步提交$.ajax({type: "POST",url: "./post.php",data: data,dataType: "html",success:function showResponse(responseJson, statusText) {$('#signup_sucess .signup_suc p').remove(); // 避免后续多次提交,重复插入提示信息,执行前先移除,无则不执行此段$('#signup_sucess .signup_suc').append('<p>报名成功</p>'); // 插入提示信息$('#signup_sucess').show().delay(3000).fadeOut(); // 显示3秒后自动隐藏$('#layer_back_drop').delay(3000).fadeOut(); // 遮罩层同上}})}})
});

三、提交成功的提示弹框及遮罩层HTML

<div id="signup_sucess" class="popup_wrap" style="display: none;"><div class="signup_suc"><a class="signup_sucess_close" href="javascript:" onclick="signupLayer('signup_sucess', false)"></a></div>
</div>
<div id="layer_back_drop" class="layer_back_drop" style="display: none;"></div>

四、实现效果

五、Node.js 服务器的搭建见前面的学习

Vue学习-001:Vue-Resource 实现登录_LaLaLa_CZ的博客-CSDN博客

JQuery002: 表单验证及ajax数据提交相关推荐

  1. ExtJs 备忘录(4)—— Form表单(四) [ 数据提交 ]

    一.截图和示例共用Ext.FormPanel 1.1 截图 由于本文主要关注的是表单提交的几种方式,所以仅用了一个表单项以便于测试和减少示例代码. 1.2 示例共用Ext.FormPanel      ...

  2. html怎么校验用户名重复,layui的表单验证支持ajax判断用户名是否重复的实例

    如下所示: 在一个表单中,在提交前我们想判断该用户名是否存在,在layui中不支持.onblur()失去焦点事件,用按钮来手动触发,表单又不太美观,可以使用form表单的verify来进行验证. ht ...

  3. html表单发送json,在HTML表单上发送JSON数据提交

    我有一个html表单,该表单有两个字段(名称,说明).当用户点击该表单的提交按钮时,我想以json格式提交表单数据.在HTML表单上发送JSON数据提交 我试过如下: function submitD ...

  4. asp.net接受表单验证格式后再提交数据_如何解析 el-form-renderer 表单渲染器1.14.0...

    DEEPEXI 大前端 常人道,一入开发深似海,技术学习无止境.在新技术层出不穷的前端开发领域,有一群身怀绝技的开发,他们在钻研前沿技术的同时,也不忘分享他们的成果,回馈社区.下面,就由小水滴带大家看 ...

  5. asp.net接受表单验证格式后再提交数据_看滴普科技大前端如何玩转el-form-renderer 表单渲染器1.14.0

    DEEPEXI 大前端 常人道,一入开发深似海,技术学习无止境.在新技术层出不穷的前端开发领域,有一群身怀绝技的开发,他们在钻研前沿技术的同时,也不忘分享他们的成果,回馈社区.下面,就由小水滴带大家看 ...

  6. asp.net接受表单验证格式后再提交数据_创建一个注册界面,并记录到数据库中...

    demo开始时我们需要准备点东西 1.jQuery 可以去cdn.js上copy一个, 2.我们要安装好node.js, 因为需要自己搭建一个服务器去测试,32位,64位,下载后配置好就行 3.开始写 ...

  7. ajax提交form表单到php,ajax如何提交form表单数据?ajax提交form表单数据的方法介绍...

    对于form表单数据的提交,我们一般都会想到使用ajax提交,那么,ajax如何来提交form表单数据呢?接下来的这篇文章就来给大家来介绍关于ajax提交form表单数据方法,有需要的伙伴可以参考一下 ...

  8. bootstrapValidator验证 表单验证通过但无法提交form的原因

    bootstrapValidator验证时,使用submit提交表单,验证通过,页面没有错误信息.但submit按钮未没有提交. 原因 : submit标签的name或id属性值为submit. $( ...

  9. ajax实现表单验证 html,Ajax+ajax做的表单验证

    //Ajx实现异步示例,blur实现失去焦点触发 jQuery('#formname').blur(check); function check(){ alert("开始执行Ajax&quo ...

最新文章

  1. docke跨主机通信之gre隧道
  2. RichTextBox粘贴两次以及去掉粘贴内容的格式问题
  3. JSON.parse与eval的区别
  4. yii2组件之下拉框带搜索功能(yii-select2)
  5. File类对文件的操作应用
  6. java外卖系统源码_JAVAWEB校园订餐系统项目源码 一个外卖点餐系统 - 下载 - 搜珍网...
  7. WordPress文章阅读量统计和显示(非插件, 刷新页面不累加)
  8. json.dumps与json.dump的区别 json.loads与json.load的区别(简洁易懂)
  9. java线程同步re_Java线程:线程的同步
  10. 关于数论【莫比乌斯反演】
  11. logstash之codec插件
  12. 算法学习(9)-链表之链表栈
  13. 勒索软件的激荡三十年
  14. java开发和android开发_浅谈Java开发和Android开发的不同
  15. MATLAB数字图像处理(一)图像的基本操作
  16. 一只基于Vue2.x的移动端微信UI。 -YDUI Touch
  17. 兖州计算机老师,兖州最美教师 | 风采展示(二)
  18. Qt官方示例-QLineEdit编辑器
  19. 使用formality的技巧
  20. java二维码之生成与解析

热门文章

  1. Unity打包AB资源(傻瓜式)
  2. 程序员常去的100个网站
  3. Python_进程/线程/多线程理解
  4. 【数据结构】贪心算法(人民币、分糖果)
  5. 2020年全球物联网市场规模将达1.9万亿美元
  6. Android O Android P 自定义开机广播
  7. 硬件FOC伺服控制芯片TMC4617适应永磁同步伺服/直流无刷伺服/直流有刷伺服/闭环步进/音圈电机
  8. 可视化词向量-TSNE
  9. JS 原始值包装类型
  10. 1,Python13_day1