验证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;
}