jquery+ajax验证不通过也提交表单问题处理

这篇文章主要介绍了jquery validationEngine中使用ajax验证不通过也提交表单问题处理,需要的朋友可以参考下

validationEngine给我们为前端的表单验证减少了很大的工作量.大部分情况我们使用validationEngine验证表单的形式有几种方式:

1 使用正常的表单提交.这种情况validationEngine验证不通过是不会提交表单的.

2 使用ajax提交表单,但是没有使用ajax验证.

这种方式也比较简单,在我们使用ajax请求前检查验证是否通过就可以,例如:

代码如下: 
//验证不通过时return  
    if(!$("form#ajaxForm").validationEngine("validate")) return ;  
    $.ajax({  
       type: "POST",  
       url: $("#ajaxForm").attr("action"),  
       data: $("#ajaxForm").serialize(),  
       dataType: "HTML",  
       success: function(data){  
          xxxx     }  
    });

3 使用正常表单提交,但是有使用ajax验证,这种方式有点让人纠结了.当我们提交表单时ajax验证不通过也能提交表单,关于这种情况,网上很多例子是改源码的,下面是截图:

.这种方法对于目前这种情况可行,这种修改的方式本身就不建议,可能对其它地方产生影响.我发现的其中一个就是当下面这种情况时:

代码如下: 
function beforeCall(form,options){  
    if(window.console){  
        console.log("表单提交验证通过后,Ajax 提交之前的回调");  
    };  
    return true;  
};  
//   
function ajaxValidationCallback(status,form,json,options){  
    if(window.console){  
        console.log(status);  
    };  
    if(status === true){  
        alert("the form is valid!");  
    }  
};  
jQuery(document).ready(function(){  
    jQuery("#formID").validationEngine({  
        ajaxFormValidation: true,  //是否使用 Ajax 提交表单  
        ajaxFormValidationMethod: ‘post‘,  //设置 Ajax 提交时,发送数据的方式  
        onAjaxFormComplete: ajaxValidationCallback,  //表单提交,Ajax 验证完成后  
        onBeforeAjaxFormValidation: beforeCall  //表单提交验证通过后,Ajax 提交之前的回调  
    });  
});

beforeCall 这个方法是不会调用的是不会调用的,所以还是不能使用

4 使用ajax验证并且使用ajax提交表单,这个方式就让人纠结了,上面修改源码的方式就不好用了.

对于第三种和第四种方式,解决方式如下:

在使用ajax验证的表单form标签上加上自定义属性control="userName,email" 属性值为要使用ajax验证的控件id(多个控件使用逗号分隔开).

代码如下: 
<form method="post" id="ajaxForm2Controls" action="admin/user/savePro.htm" control="userName">

在每个需要验证的控件上加上两个属性url(ajax请求的地址)和errror(不通过时的提示信息)

代码如下: 
<input class="textBox validate[required,minSize[6],maxSize[128],custom[onlyLetterNumber]]" type="text" name="userName" id="userName" maxlength="128" url="admin/user/uniqueName.htm" error="用户已存在..."/>

javascript当中声明两个全局数组

代码如下: 
var controlId = new Array();  //保存验证不通过的控件ID
var errors = new Array() ;  //保存验证不通过的提示信息

思路是这个的获取form标签上的control属性上的值(使用逗号分隔获取每个控件ID),使用ajax遍历请求,当验证不通过时 将控件ID和提示信息添加到controlId 和 errors 中,并且提示信息.当提交表单时判断controlId 是否为空,不为空则循环显示提示信息.

代码如下: 
$(function() {    
    var ajaxForm2Controls = $("form#ajaxForm2Controls") ;  
    //表单提交时  
    $(ajaxForm2Controls).submit(function() {  
        ajaxForm2Control(ajaxForm2Controls) ;  
        return false ;  
    }) ;  
    //失去焦点时验证控件  
    valControls(ajaxForm2Controls) ;  
});

表单提交方法:

代码如下: 
function ajaxForm2Control(obj) {  
    //当存在错误信息时返回,找显示错误信息  
    if(controlId.length > 0) {  
        alertinfo() ;  
        return false ;   
    }  
    if(!$(obj).validationEngine("validate")) return false;  //验证没有使用ajax验证的控件(不是ajax验证的字段是可以正常验证的, 不通过就返回)  
    $.ajax({  
       type: "POST",  
       url: $(obj).attr("action"),  
       data: $(obj).serialize(),  
       dataType: "html",  
       success: function(data){  
           xxxxxx  
       }  
    });  
}

为表单添加焦点事件

代码如下: 
//表单需要验证的控件  
function valControls(ajaxForm2Controls) {  
    //获取需要使用ajax验证的控件  
    var controlsStr = ajaxForm2Controls.attr("control") ;  
    //属性未定义时返回  
    if(typeof(controlsStr) === "undefined" || controlsStr.length <= 0) return ;  
    //分隔获取控件ID  
    var controls = controlsStr.split(/,/g) ;  
    for(var i in controls) {  
        //添加焦点离开事件  
        $("#" + controls[i]).blur(function() {  
          if($(this).val().length <= 0) return false;  
            //重新设置数组  
            controlId.length = 0;   
            errors.length = 0 ;  
            //错误信息  
            var error = $(this).attr("error") ;  
            $.ajax({  
               type: "GET",  
               url: $(this).attr("url"),  
               data: $(this).serialize(),  
               dataType: "text",  
               success: function(data){  
                   if(data==="true") {  
                     //验证不通过将错误信息放入数组中  
                       controlId.push(controls[i]);  
                       errors.push(error) ;  
                       //提示信息  
                       alertinfo() ;  
                   }  
               }  
            });  
        }) ;  
    }  
}

错误提示信息:

代码如下: 
//弹出信息  
function alertinfo() {  
    if(controlId.length > 0) {  
        for(var i in controlId) {  
            //validationEngine方法,为指定ID弹出提示.  
                        //用法:<span style="">$("#id").validationEngine("showPrompt","提示内容","load");  
                           //<span style="">在该元素上创建一个提示,3 种状态:"pass", "error", "load"</span></span>  
            $("#" + controlId[i]).validationEngine("showPrompt", errors[i], "error");  
        }   
    }  
}

这样当我们无论是第三种方式还是第四种方式提交表单,提交前调用controlId是否有值就可以了.

原文链接:http://www.kubiji.cn/topic-id4378.html

注:相关阅读请移步到文章档案WEB前端JS代码频道。

jquery+ajax验证不通过也提交表单问题处理
原文出处:http://www.kubiji.cn/topic-id4378.html
时间: 2024-08-04 18:16:19

jquery+ajax验证不通过也提交表单问题处理的相关文章

jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)(转)

版权声明]:版权归作者所有,转载时请以超链接形式标明文章原始出处和作者信息及本声明:http://www.open-lib.com/Forum/Read_69_1.action 前言: 当jquery ajax在utf-8编码下(页面utf-8,接收utf-8),无任何问题.可以正常post.get,处理页面直接获取正确的内容. 但在以下情况下: GBK -> AJAX POST ->GBK UTF-8 -> AJAX POST ->GBK 后台代码无法获取正确的内容,通常表现为获

jquery通过submit()和serialize()提交表单

<script type="text/javascript"> $(function() { $('#form1').submit(function() { //当提交表单时,会发生 submit 事件. //此处可做表单验证 //... ... var postData = $("#form1").serialize();//序列化表单,后台可正常通过post方法获取数据 $.ajax({ type: "POST", url: &q

jquery中使用$(#form).submit()提交表单无效原因分析及解决Script

今天写了一个表单验证,验证的时候没有任何问题,但是页面提交不了,很诡异,然后各种百度,查了一下的原因是input的id不能为submit 注意:提交表单的时候,input的id不能为submit <dl> <dd> <label>角色名称:</label> <input type="text" id="role_name" name="name" style="text-indent

无法在提交表单前通过ajax验证解决办法

博主在一个小项目中,要实现注册表单无刷新验证用户名或密码,但是发现不管怎么样都无法在先通过ajax验证之前不提交表单. 例如:一个简单的验证函数 1 function check(){ 2 $.post("#name")("xxx.php",{user:user}function(msg){ 3 if(msg){return false;} 4 }) 5 } 1 <form class="form" method="post&qu

第一百八十六节,jQuery,验证表单插件,Ajax 表单插件,验证和提交表单

jQuery,验证表单插件,Ajax 表单插件,验证和提交表单 HTML <form id="reg" method="post" action="yzh.php" title="会员注册"> <ol class="reg_error"></ol> <p> <label for="user">帐号:</label>

JQuery ajax提交表单及表单验证

JQuery ajax提交表单及表单验证 博客分类: jsp/html/javascript/ajax/development Kit 开源项目 注:经过验证,formValidator只适合一个页面不超过一个表单的情况. 本例实现功能:通过ajax提交表单,并在提交表单前对表单的数据进行验证. 主要通过两个插件实现: 第一个: jQuery Form Plugin http://jquery.malsup.com/form 主要功能是ajax提交表单 第二个:jQuery formValida

Ajax提交表单时验证码自动验证 php后端验证码检测

本文通过源码展示如何实现表单提交前,验证码先检测正确性,不正确则不提交表单,更新验证码. 1.前端代码 index.html <!DOCTYPE html> <html> <head> <title>验证码提交自验证</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta htt

Validator验证Ajax提交表单的方法

当我们在一些稍微复杂的业务时,可能会遇到需要多个表单form在同一个页面的情况,但是提交一个表单以后不想页面刷新或者跳转,那么我们考虑到的就是Ajax提交表单,那么如何让Jquery的validator插件也可以对异步提交的表单进行验证呢?我们继续往下看. 在这里,我就用网络上的一个例子来说明好了. 下面是一个比较常见的jquery .ajax提交表单的写法 Js代码   $("#submitButton").click(function(){ //序列化表单 var param = 

ajax提交表单无法验证easyui的验证选项(比如required等)

在实际开发中,遇到ajax方式提交表单没法验证easyui的验证选项,这对实际用户体验造成了很大的困扰.当然,这也是理所当然的事情. 解决办法:使用jquery中ajax的beforeSend事件(这需要与easyui框架协同使用),例如:   submitForm:function(formId,url){ var formData = $(formId).form('getValues'); // 获取表单数据 $.ajax({ type:'POST', url:url, data:{for