jquery.validate+jquery.form提交的三种方式
原文:http://www.cnblogs.com/datoubaba/archive/2012/06/06/2538873.html
jquery.validate+jquery.form提交的三种方式
概述:本篇主要讨论jquery.validate结合jquery.form实现对表单的验证和提交方案。
方式一:是通过jquery.validate的submitHandler选项,即当表单通过验证时运行回调函数。在这个回调函数中通过jquery.form来提交表单;
方式二:是通过jquery.form的beforeSubmit,即在提交表单前运行的回调函数,这个函数假设返回true,则提交表单,假设返回false,则终止提交表单。依据jquery.validate插件的valid()方法,就能够通过jquery.form提交表单时来对表单进行验证。
方式三:是通过jquery.validate验证表单的validate方法。这种方法的优点是对表单验证的控制更加自由
实例:以下通过三个实例分别阐述上面的三种方式
加载CSS样式文件
<link rel="stylesheet" type="text/css" media="screen" href="style.css" />
CSS样式文件内容
input{height:25px;line-height:25px;padding-left:4px; }span.checked{padding: 0px 5px 0px 25px;margin-left: 10px;margin-top: 0px;margin-bottom: 3px;height: 25px;line-height:25px;font-size: 12px;white-space: nowrap;text-align: left;color: #E6594E;background: url("images/acion2.png") no-repeat 3px; /* #FCEAE8 */ } span.unchecked{padding: 0px 5px 0px 25px;margin-left: 10px;margin-top: 0px;margin-bottom: 3px;height: 23px;line-height:23px;font-size: 12px;border: 1px solid #E6594E;white-space: nowrap;text-align: left;color: #E6594E;background: #FCEAE8 url("images/acion.png") no-repeat 3px; }
加载javascript文件
<script language="JavaScript" type="text/JavaScript" src="js/jQuery1.6.2.js"></script> <script language="JavaScript" type="text/JavaScript" src="js/jquery.form.js"></script> <script language="JavaScript" type="text/JavaScript" src="js/jquery.validate.js"></script> <script language="JavaScript" type="text/JavaScript" src="js/localization/messages_tw.js"></script>
HTML内容
<body><span id="result"></span> <form id='commentForm'><fieldset><legend>jquery.validate+jquery.form提交的三种方式</legend><p><label for='cusername'>姓名</label><em>*</em><input id='cusername' name='username' size='25' /></p><p><label for='cemail'>电子邮件</label><em>*</em><input id='cemail' name='email' size='25' /></p><p><input class='submit' type='submit' value='提交'></p></fieldset> </form> </body>
jquery.validate+jquery.form提交方式1的javascript内容
<script language="javascript"> function showResponse(responseText,statusText) {if(statusText=='success'){$("#result").html(responseText);} }$(document).ready(function(){$('#commentForm').validate({focusCleanup:true,focusInvalid:false,errorClass: "unchecked",validClass: "checked",errorElement: "span",submitHandler:function(form){$(form).ajaxSubmit({type:"post",url:"test_save.php?time="+ (new Date()).getTime(),//beforeSubmit: showRequest, success: showResponse});},errorPlacement:function(error,element){var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");if(s!=null){s.remove();}error.appendTo(element.parent());},success: function(label) {//label.addClass("valid").text("Ok!")label.removeClass("unchecked").addClass("checked");},rules:{username:{required:true,minlength:3},email:{required:true}}}); }); </script>
jquery.validate+jquery.form提交方式2的javascript内容
<script language="javascript"> function showResponse(responseText,statusText) {if(statusText=='success'){$("#result").html(responseText);} }function showRequest(formData,jqForm,options){return $("#commentForm").valid(); }$(document).ready(function(){$('#commentForm').submit(function(){$(this).ajaxSubmit({type:"post",url:"test_save.php?time="+ (new Date()).getTime(),beforeSubmit:showRequest,success:showResponse});return false; //此处必须返回false,阻止常规的form提交 });$('#commentForm').validate({focusCleanup:true,focusInvalid:false,errorClass: "unchecked",validClass: "checked",errorElement: "span",errorPlacement:function(error,element){var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");if(s!=null){s.remove();}error.appendTo(element.parent());},success: function(label) {//label.addClass("valid").text("Ok!")label.removeClass("unchecked").addClass("checked");},rules:{username:{required:true,minlength:3},email:{required:true}}}); }); </script>
jquery.validate+jquery.form提交方式3的javascript内容
<script language="javascript">var options={focusCleanup:true,focusInvalid:false,errorClass: "unchecked",validClass: "checked",errorElement: "span",errorPlacement:function(error,element){var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");if(s!=null){s.remove();}error.appendTo(element.parent());},success: function(label) {//label.addClass("valid").text("Ok!")label.removeClass("unchecked").addClass("checked");},rules:{username:{required:true,minlength:3},email:{required:true}}};function showResponse(responseText,statusText) {if(statusText=='success'){$("#result").html(responseText);} }function showRequest(formData,jqForm,options){return $("#commentForm").valid(); }$(document).ready(function(){validator=$('#commentForm').validate(options);$("#reset").click(function(){validator.resetForm();});$("button").click(function(){validator.form();});$('#commentForm').submit(function(){$(this).ajaxSubmit({type:"post",url:"test_save.php?time="+ (new Date()).getTime(),beforeSubmit:showRequest,success:showResponse});return false; //此处必须返回false,阻止常规的form提交 }); }); </script>
DEMO源代码:下载
一些问题
1、事实上这个问题在昨天晚上写这篇文章的时候就有发现,即我在HTML文件头使用<!DOCTYPE html>时,输入框及错误信息的样式似乎有些问题。只是今天发现问题并不是这么简单,在使用<!DOCTYPE html>时,针对“姓名”这个输入框来说——仅仅须达到三个字符就觉得通过验证——在输入第一个字符、第二个字符时,错误显示正常,输入第三个字符时,错误显示消失,并显示一个表示验证通过的“逗号”图片。到眼下为止,一切似乎都非常正常,但假设在继续输入字符,比方输入第四个字符、第五个字符......问题出现了。例如以下图所看到的:
不使用<!DOCTYPE html>,而使用<html>时没有这种问题,一切正常。只是,如今的问题是,为什么加上<!DOCTYPE html>会产生这种问题?并且,做为前端来说,加上<!DOCTYPE html>是必须的。
这个问题处理的比較纠结,这里罗列一下处理的过程。而且在最后给一个解决方式
首先,是由于昨天在查看错误提示信息,关注一下插入错误信息的代码。我在errorPlacement中添加了一句:alert(element.parent().html());
errorPlacement:function(error,element){alert(element.parent().html());var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");if(s!=null){s.remove();}error.appendTo(element.parent()); },
输入第一个字符时,得到例如以下图所看到的
输入三个字符,验证成功后,得到例如以下图所看到的:
继续输入很多其它字符,得到例如以下图所看到的
这就说明了下面几个问题:
1、无论验证失败还是成功,都会调用errorPlacement:function(...)
2、s.remove()没有起作用。
因为在写这篇文章时使用的是<html>而不是<!DOCTYPE html>,弹出的内容是htmlFor="cusername",而不是for="cusername",例如以下图所看到的:
因此,上面的代码中写成例如以下的方式
var s=element.parent().find("span[htmlFor='" + element.attr("id") + "']");if(s!=null){s.remove();}
然而在<!DOCTYPE html>下,无法依据htmlFor找到<span class=checked generated="true" htmlFor="cusername"></span>,因此这里应该把htmlFor改成for,即
errorPlacement:function(error,element){alert(element.parent().html());var s=element.parent().find("span[for='" + element.attr("id") + "']");if(s!=null){s.remove();}error.appendTo(element.parent()); },
问题似乎攻克了。但上面提到,无论验证成功或失败,都会调用errorPlacement:function(...),那能够在这里推断有没有错误,假设有错误,则显示。防止已经验证成功的情况下仍会调用。这样就不会寻找span的for属性值是否为当前控件的name名称了(样例中是for="cusername")。改进的代码例如以下:
errorPlacement:function(error,element){if(error.html()!=''){error.appendTo(element.parent());} },
尽管解决问题,可是在chrome、firefox下仍有问题。了解这个问题的现象,能够用firefox或chrome測试一下——焦点离开输入框后,无法验证,仅仅有点击“提交”button后才干够验证——这个问题的解决方式眼下还没有深入下去。可是有解决的办法是,将上面的jquery1.6.2换成jquery1.3.2或jquery1.4(其他的jquery版本号未測试,可能是低于jquery1.6.2的版本号都能够)就可以解决问题。
建议:
1、使用jquery1.3.2版本号,这样能够节省非常多时间来解决兼容方面的问题。
很多其它:
本样例中的jquery.validate,攻克了remote远程验证仅仅返回true or false的局限。能够返回代码及出错的提示信息,更好的人性化需求。用法就在这介绍一下
添加下面函数
function GetRemoteInfo(postUrl,data){var remote = {type: "POST",async: false,url: postUrl,dataType: "xml",data: data,dataFilter: function(dataXML) {var result = new Object();result.Result = jQuery(dataXML).find("Result").text();result.Msg = jQuery(dataXML).find("Msg").text();//alert(result.Result);if (result.Result == "-1") {result.Result = false;return result;}else{result.Result = result.Result == "1" ? true : false;return result;}}};return remote; }
$(document).ready(function(){var dataInfo ={email:function(){return $("#cemail").val();}};var remoteInfo = GetRemoteInfo('check-email.php?time='+(new Date()).getTime(),dataInfo);$('#commentForm').validate({rules:{username:{required:true,minlength:3},email:{required:true,remote:remoteInfo }}});.... });
check-email.php返回的内容为xml格式,格式例如以下
<?php header("Content-Type:text/xml"); echo '<?'.'xml version="1.0" encoding="utf-8"'.' ?>'; ?> <AjaxClass> <Msg>username格式不对,username必须包括testa,请又一次输入!</Msg> <Result>0</Result> </AjaxClass>
result值为0,返回的是false,表示验证失败;result值为1,返回的是true,表示验证成功
jquery.validate+jquery.form提交的三种方式相关推荐
- jquery上传图片_文件上传三种方式
来源:python宝典 链接: https://mp.weixin.qq.com/s/YUplCQDfAucA_rS8E1T6WA 需求 上传图片在页面显示 Form表单上传 <html ...
- jQuery实现Ajax异步请求的三种方式
jQuery实现Ajax jQuery框架对js原生的ajax进行了封装,封装后的ajax相比原生就变的更加简洁方便,而且功能更加丰富 常用的三种ajax实现的方法: get:$.get(url,[d ...
- form表单用butten提交后无反应表单提交三种方式
form表单用butten提交后无反应&表单提交三种方式 一,表单提交无反应 有时候,我们发现表单提交的butten按钮,根本就没niao用.鼠标都点烂了,也提交不上去.找了半天什么错误也没找 ...
- c .net ajax,Asp.net mvc 2中使用Ajax的三种方式
在Asp.net MVC中,我们能非常方便的使用Ajax.这篇文章将介绍三种Ajax使用的方式,分别为原始的Ajax调用.Jquery.Ajax Helper.分别采用这三种方式结合asp.net m ...
- jquery调用click事件的三种方式
第一种方式: $(document).ready(function(){$("#clickme").click(function(){alert("Hello World ...
- jQuery validate插件submitHandler提交导致死循环解决方法
作者:海底苍鹰 地址:http://blog.51yip.com/jsjquery/1511.html dom对像的提交form.submit();和jquery对像的提交$('').submit() ...
- Web应用中避免Form重复提交的三种方案
Web应用中避免Form重复提交的三种方案 2007-08-21 18:29 Web应用中重复提交的问题的三种解决方案 前两种是利用javascript,后面一种是在使用Struts的情况下的参考实现 ...
- (一)JQuery动态加载js的三种方法
Jquery动态加载js的三种方法如下: 第一种: $.getscript("test.js"); 例如: <script type="text/javascrip ...
- jquery 调用 click 事件 的 三种 方式
第一种方式: $(document).ready(function(){ $("#clickme").click(function(){ alert("Hello Wor ...
最新文章
- 人工智能这条小船何时才能变成航母?
- 南达科他州立大学计算机科学,关于举行南达科他州立大学Srinivas Janaswamy博士学术报告的通知...
- Android零基础入门第20节:CheckBox和RadioButton使用大全
- 错误:无法访问android.app.Activity 找不到android.app.Activity的类文件
- 大数据业务学习笔记_学习业务成为一名出色的数据科学家
- poj3009深度优先搜索挑战程序设计竞赛
- c#中的socket(tcp)
- 战疫,微软资深高管的十余年远程办公管理经验
- otn系统中常用的电层_夏季温室大棚生产中常用的降温系统
- 秒懂商用区块链关键技术:智能合约
- OpenCV-图像处理(06、调整图像亮度与对比度)
- html mht word,mht格式怎么转换成word
- LibreOJ #10003加工生产调度(Johnson算法求解最短时间)
- 远程服务器批量管理员权限,Win10系统下怎样实现批量远程桌面管理?Win10系统进行批量远程管理的方法...
- 网约车定价策略:手机越贵打车越贵?
- 00后大学生在数学真理阳光下学习微积分
- Linux下ll命令
- NumPy学习笔记前言
- 独家!华为、腾讯齐聚香港,一起密谋着什么?
- 云之讯官方测试Demo音频版源码阅读
热门文章
- 11月国内浏览器市场份额:IE、Chrome均遭蚕食
- 研究Ajax(二)WebService实现加 减 乘 除
- python和pandas有什么关系_python pandas效率到底如何?
- 放弃吧,Hibernate 4直到4.3.0 Beta1还没有解决Proxool连接池不可用的问题
- 启动数据库时提示ORA-03113: 通信通道的文件结尾解决方法
- 05mycat父子表
- [] ubuntu 14.04 搜狗拼音输入法安装
- ES 6理解 let
- Nginx环境搭建Discuz论坛
- python之Excel操作