`

jquery validationengine 异步验证问题

 
阅读更多

jquery validationengine 的基本功能和使用我在此就不多讲了,大家可以参考

下载:https://github.com/posabsolute/jQuery-Validation-Engine

文档:http://posabsolute.github.io/jQuery-Validation-Engine/

我使用的版本为:jQuery.validationEngine v2.6.1

在使用异步验证的时候,对于多个字段验证,我做了扩展,在全局参数出,加了一个字段,ajaxField,在点击提交按钮的时候,对该字段进行处理,因为点击提交按钮,作者认为没有必要验证ajax异步验证字段,忽略了这些字段的验证,但是其实需要验证,该验证组件原理是如果该字段验证了,对该字段进行标记,所以对_checkAjaxFieldStatus方法进行改造,使其可以满足多个字段。

1.JS:

function ajaxValidationCallback(status, form, json, options){
       
  }
  jQuery(document).ready(function(){
   $.validationEngineLanguage.allRules["ajaxFunction"] = {
              "url": "sys/function/validate"
   };
   jQuery("#formFunID").validationEngine({
    ajaxField:['fCode','fCaption'],
    ajaxFormValidation: true,
    onAjaxFormComplete: ajaxValidationCallback
   });

2.表单:

<form id="formFunID"  method="post" action="sys/function/create" style="width:100%">
 <ul style="clear:both; padding-top:4px; margin-top:0px;">
  <li><label><i class="biaoji">*</i>功能名称:</label><input id="fCaption" class="validate[required,ajax[ajaxFunction]] text-input" type="text" name="caption" /></li>
  <li><label><i class="biaoji">*</i>功能编码:</label> <input id="fCode" class="validate[required,ajax[ajaxFunction]] text-input" type="text" name="functioncode" /></li>
 </ul>
 <div id="split">
 <input id="cancel_btn" class="submit" type="button" value="取消"/>
 <input id="submit_add" class="submit" type="submit" value="提交"/>
 </div>
 </form>

3.验证

@RequestMapping(value="/sys/function/validate",produces="text/plain;charset=UTF-8")
 @ResponseBody
 public String validateFunctionCode(HttpServletRequest request,HttpServletResponse response) throws IOException{
  //页面中要验证的输入框中的值,接收参数值必须是fieldValue,组件内设置
  String functionCode = request.getParameter("fieldValue");
  //页面中要验证的输入框的ID,接收参数必须是fieldId,组件内设置
  String fieldId = request.getParameter("fieldId");
  System.out.println(request.getParameter("name"));
  boolean isExists = false;
  String msgErr = "";
  String msgRig = "";
  if (fieldId.equals("fCode")){
   msgErr = "功能编码已存在";
   msgRig = "功能编码可用";
   SysFunction function = new SysFunction();
   function.setFunctioncode(functionCode);
   isExists = functionService.selectIsExistsFunction(function);
  } else if (fieldId.equals("fCaption")){
   msgErr = "功能名称已存在";
   msgRig = "功能名称可用";
   SysFunction function = new SysFunction();
   function.setCaption(functionCode);
   isExists = functionService.selectIsExistsFunction(function);
  }
  String out = "";
  if (isExists) {
   out = (new AjaxValidationFormResponse(fieldId,"false",msgErr)).toValidation();
  } else {
   out = (new AjaxValidationFormResponse(fieldId,"true",msgRig)).toValidation();
  }

//返回json格式必须是[字段ID,布尔类型,显示信息]这种格式,因为在组件内解析的时候是这种格式
  return out;
 }

4.转JSON

package com.cnpc.oms.utils.validate;

import java.io.Serializable;

/**
 * 前台页面提示
 * @author 张昭
 *
 */
public class AjaxValidationFormResponse implements Serializable{
 /**
  *
  */
 private static final long serialVersionUID = 1L;

 // the html field id
 private String id;

 // true, the field is valid : the client logic displays a green prompt
 // false, the field is invalid : the client logic displays a red prompt
 private String status;

 // either the string to display in the prompt or an error
 // selector to pick the error message from the translation.js
 private String message;

 public String getId() {
  return id;
 }

 public void setId(String id) {
  this.id = id;
 }

 public String getStatus() {
  return status;
 }

 public void setStatus(String status) {
  this.status = status;
 }
 

 public String getMessage() {
  return message;
 }

 public void setMessage(String message) {
  this.message = message;
 }
 /**
  * 验证框架使用
  * @param fieldId
  * @param s
  * @param msg
  */
 public AjaxValidationFormResponse(String fieldId, String s, String msg) {
  id = fieldId;
  status = s;
  message = msg;
 }
 /**
  * 提示使用
  * @param msg
  */
 public AjaxValidationFormResponse(String msg) {
  message = msg;
 }
 /**
  * 验证框架使用
  * @return
    @author 张昭
  */
 public String toValidation() {
  return "[\"" + id + "\","+status+",\"" + message + "\"]";
 }
 /***
  * 前台提示使用
  * @return
    @author 张昭
  */
 public String toMessage(){
  return "{\"msg\":\""+message+"\"}";
 }
}
5.jquery.validationEngine.js

修改:

$.validationEngine = {
  fieldIdCounter : 0,
  defaults : {

                 ajaxField:"",

                 ......其他原有字段

}  

}

 

_checkAjaxFieldStatus : function(fieldid, options) {
   if (fieldid instanceof Array){
    var fStatus = false;
    for (var i=0;i<fieldid.length;i++){
     if (options.ajaxValidCache[fieldid[i]] == true){
      fStatus = true;
     }else{
      fStatus = false;
      break;
     }
    }
    return fStatus;
   }else{
    return options.ajaxValidCache[fieldid] == true;
   }
  }

 

6.jquery.validationEngine.js

修改_onSubmitEvent方法:

_onSubmitEvent : function() {
   var form = $(this);
   var options = form.data('jqv');
   // check if it is trigger from skipped button
   if (form.data("jqv_submitButton")) {
    var submitButton = $("#" + form.data("jqv_submitButton"));
    if (submitButton) {
     if (submitButton.length > 0) {
      if (submitButton.hasClass("validate-skip")
        || submitButton
          .attr("data-validation-engine-skip") == "true")

       return true;
     }
    }
   }
   options.eventTrigger = "submit";
   // validate each field
   // (- skip field ajax validation, not necessary IF we will perform
   // an ajax form validation)
   var r = methods._validateFields(form);
   if (r && options.ajaxFormValidation) {
    if (options.ajaxField != null && options.ajaxField != "") {
     if (!methods._checkAjaxFieldStatus(options.ajaxField, options)) {
      return false;
     }else{
      methods._validateFormWithAjax(form, options);
      // cancel form auto-submission - process with async call
      // onAjaxFormComplete
      return false;
     }
    }else{
     methods._validateFormWithAjax(form, options);
     // cancel form auto-submission - process with async call
     // onAjaxFormComplete
     return false;
    }
   }
   if (options.onValidationComplete) {
    // !! ensures that an undefined return is interpreted as return
    // false but allows a onValidationComplete() to possibly return
    // true and have form continue processing
    return !!options.onValidationComplete(form, r);
   }
   /*
    * if (r && !methods._checkAjaxStatus(options)) { return false; }
    *
    * if(options.onValidationComplete) {
    * options.onValidationComplete(form, r); return false; }
    */
   
   return r;
  }

 

0
0
分享到:
评论

相关推荐

    jQuery Validation Engine ( jQuery 表单验证插件)

    - `js` 文件夹:主要的JavaScript文件,如`validationEngine.jquery.js`是核心库,`validationEngine.jquery.min.js`是压缩版本。 - `demo` 文件夹:包含示例代码和演示,可以帮助你快速理解和使用Validation Engine...

    jQuery.validationEngine 表单验证中文版

    对于需要服务器端验证的场景,jQuery.validationEngine支持异步验证。通过`ajaxFormValidationMethod`和`ajaxFormValidationURL`参数,可以配置插件进行Ajax请求,验证用户输入的数据。 **六、国际化支持** `...

    jquery.validationEngine 控件验证表单跟检测数据库是否有重名

    《jQuery.validationEngine控件在表单验证与数据库重名检测中的应用详解》 在Web开发中,表单验证是不可或缺的一环,它确保了用户输入数据的准确性和完整性。jQuery.validationEngine是一款强大的JavaScript验证...

    jquery表单验证插件validationEngine---个人修改

    **jQuery表单验证插件ValidationEngine详解** 在Web开发中,表单验证是必不可少的一环,它能够确保用户输入的数据符合预设的规则,从而提高数据的准确性和系统的稳定性。ValidationEngine是一款基于jQuery的强大的...

    validationEngine验证组件改样式

    validationEngine是一款基于jQuery的表单验证插件,它提供了丰富的验证规则和自定义错误消息功能,使得在网页中实现复杂的用户输入验证变得简单易行。这个压缩包文件可能包含了经过修改后的validationEngine验证组件...

    表单验证jquery插件

    - **异步验证**:通过 `ajaxCall` 规则实现,例如邮箱地址的唯一性验证。 - **自定义事件**:插件提供了 `onValidationComplete` 回调函数,用于在验证完成后执行额外操作。 ## 5. 总结 jQuery Validation Engine ...

    jquery validation 支持zepto第二版

    在jQuery Validation中,`remote`验证规则允许开发者通过异步请求(通常是AJAX)来验证用户输入。然而,当在Zepto.js中使用这个功能时,可能由于其默认的异步行为与jQuery Validation的期望不一致,导致问题出现。...

    jquery-ui-validation-Engine

    1. **异步验证**:通过 `ajaxFormValidator` 方法,可以实现表单数据的异步验证,例如检查用户名是否已存在。 2. **分组验证**:使用 `grouped validaion` 可以将一组相关字段作为一个整体进行验证。 3. **自定义...

    表单验证jQuery-Validation-Engine-master

    8. **AJAX验证**:支持异步验证,可以与服务器端接口配合,验证更复杂的数据条件。 9. **自定义验证方法**:如果内置的验证规则不能满足需求,开发者可以创建自己的验证函数,增强验证功能。 为了使用jQuery ...

    很漂亮的Jquery验证框架(内带实例)

    除了基础的验证规则,Validation Engine还支持复杂的验证场景,如依赖验证(当某个字段的值改变时,触发其他字段的验证)、Ajax异步验证(验证数据无需刷新页面)等。例如,我们可以定义一个自定义的验证函数,用于...

    动态表单验证 jquery

    总的来说,`jquery.validationEngine.js`通过与jQuery的结合,提供了强大的表单验证功能,包括丰富的验证规则、自定义验证、友好的提示样式和异步验证。通过合理配置和使用,可以轻松实现动态、高效的表单验证,提升...

    简单易用的表单验证

    总的来说,jQuery Validation Engine是一个强大且灵活的工具,可以帮助开发者轻松处理表单验证问题,提高项目效率,优化用户界面。无论你是初学者还是经验丰富的开发者,这款插件都能为你带来便利。只需合理利用其...

    validationEngine中文版.rar

    9. **最佳实践**:获取关于提高表单性能和用户体验的建议,如延迟验证、异步验证等。 10. **社区资源**:可能会提供相关社区或论坛的信息,以便开发者在遇到问题时能获取更多的帮助和支持。 通过学习和应用...

    表单无刷新验证

    8. **AJAX验证**:对于需要服务器端验证的场景,validationEngine可以发起AJAX请求进行异步验证,提高用户体验。 9. **集成其他框架**:除了基本的jQuery,validationEngine也可与其他前端框架(如Bootstrap、Vue、...

    (六)struts2 spring3 mybatis-3.2.3jquery.validationEngineajax表单验证数据库重复

    【标题】"(六)struts2 spring3 mybatis-3.2.3 jquery.validationEngine ajax表单验证 数据库重复"所涉及的技术栈主要包括Struts2、Spring3、MyBatis3.2.3以及前端的jQuery.validationEngine和Ajax技术。...

    jquery 表单验证集合

    2. **ValidationEngine**:这是一个功能强大的验证引擎,支持多语言,提供多种预设验证样式,同时允许自定义CSS样式。 **三、常见验证类型** 1. **非空验证**:确保字段不为空,使用`required`规则。 2. **长度...

    jQuery表单验证插件

    通过修改`validationEngine.jquery.css`文件,可以定制验证提示的样式,以适应不同的项目需求。 ### 9. 与Ajax结合 formValidator可以与Ajax提交相结合,验证通过后异步提交表单,提供无刷新的用户体验。使用`ajax...

    jQuery.Validator

    "jquery.validationEngine.js"是jQuery.Validator的核心脚本,包含了所有验证功能的实现。这个文件通常需要在HTML页面中引入,以启用验证功能。 总的来说,jQuery.Validator通过其丰富的验证规则、多语言支持、...

Global site tag (gtag.js) - Google Analytics