jquery validationEngine ajax验证优化

验证input,先验证ajax外的规则(删除data-validation-engine中的ajax规则),验证之后自己写ajax来验证,最后再恢复原来的规则

function validateAjax(input,isValidate){
    var $input = $(input), engine = $input.attr("data-validation-engine");

    //验证除ajax外的其他规则
    if(isValidate) {
        //先移除validation中的ajax验证
        $input.attr("data-validation-engine", engine.replace(/,ajax\[.*?\]/, ""));
        //先通过其他规则的验证
        var validateResult = $input.validationEngine("validate");
        //恢复原来的ajax验证
        $input.attr("data-validation-engine", engine);
        if (!validateResult) return false;
    }
    
    //获取验证规则
    var index = engine.indexOf(",ajax");
    if(index < 0) return true;
    var ajaxRule = engine.substring(index);
    ajaxRule = ajaxRule.replace(",ajax[", "").replace("]]","");

    //根据验证规则获取url,可添加
    var url = "", msg = null;
    switch(ajaxRule){
        case 'a': url = "a.html";break;
        case 'b': url = "b.html";break;
    }

    //自定义验证ajax,ajax验证直接用validationEngine默认的ajax验证模式,后台返回值格式["id",boolean]
    if(url != ""){
        $.ajax({
            type:'GET',
            url:url,
            data:{filedValue:$input.val()},
            dataType:'JSON',
            success:function(data){
                if(!data[1]){
                    //错误信息直接写input的ajaxError属性中
                    msg = $input.attr("ajaxError");
                }
            }
        });
    }

    //如果验证失败,则显示失败信息
    if(msg != null) {
        $input.validationEngine("showPrompt", msg, "error");
    }

    return msg == null;
}

form表单全部验证,先调用validate验证所有内容(默认会跳过ajax验证),然后遍历所有有data-validation-engine属性的input,调用上面的方法,验证ajax,然后返回验证结果

function validateAjaxBeforeSubmit(form){
    var $form=$(form), result=true;

    //先验证所有信息
    if(!$form.validationEngine("validate")) return false;

    //遍历跳过的ajax信息
    $form.find("[data-validation-engine]").each(function(){
        if(validateAjax(this, false)) return true;
        else {
            //验证结果设为false并跳出each循环
            result = false;
            return false;
        }
    });

    return result;
}



你可能感兴趣的:(jquery validationEngine ajax验证优化)