//验证
; RoadUI.Validate = function ()
{
var instance = this;
this.bind = function ($elements)
{
if (!$elements || $elements.size() == 0)
{
return;
}
$elements.each(function ()
{
var $this = $(this);
var type = $this.attr("type");
if ((typeof type) == "string" && !type.isNullOrEmpty())
{
if (type.toLowerCase() == "radio" || type.toLowerCase() == "checkbox")
{
$this.bind("change", function () { instance.validateElement($this); });
}
else
{
$this.bind("blur", function () { instance.validateElement($this); });
}
}
});
};
this.unbind = function ()
{
$("[validate]").each(function ()
{
var $this = $(this);
var type = $this.attr("type");
if ((typeof type) == "string" && !type.isNullOrEmpty())
{
if (type.toLowerCase() == "radio" || type.toLowerCase() == "checkbox")
{
$this.unbind("change");
}
else
{
$this.unbind("blur");
}
}
});
};
// form1 要验证的form,对象或id promptType提示方式 0:window.alert 1:输入框后面提示 2:输入框后面提示后显示图标,不显示文字
this.validateForm = function (form1, promptType)
{
var $f;
if ((typeof form1) == 'string')
{
$f = $("#" + $.trim(form1));
}
else
{
$f = $(form1);
}
if (!$f || $f.size() == 0)
{
return;
}
var flag = true;
$("[validate]", $f).each(function ()
{
var flag1 = instance.validateElement($(this), promptType);
if (!flag1 && promptType == 0)
{
flag = false;
return false;
}
if (flag && !flag1)
{
flag = flag1;
}
});
var e = arguments.callee.caller.arguments[0] || window.event;
if (flag && e && e.srcElement != null)
{
var $submits = $("input[type='submit']", $f);
$submits.prop("disabled", true);
var eventElement = e.srcElement;
if (eventElement)
{
$submits.each(function ()
{
if ($(this).get(0) === e.srcElement)
{
$f.append('');
}
});
if ("INPUT" == e.srcElement.tagName)
{
$f.submit();
}
}
}
return flag;
};
this.validateElement = function ($element, promptType)
{
if (!$element)
{
return false;
}
var $ele = $($element);
if (!$ele || $ele.size() == 0)
{
return false;
}
var validateType = $ele.attr("validate");
if (validateType.isNullOrEmpty())
{
return false;
}
var validateArray = validateType.split(',');
if (validateArray.length > 1)
{
var cannullFlag = false;
var arrIndex = null;
for (var j = 0; j < validateArray.length; j++)
{
if (validateArray[j].toLowerCase() == "canempty" || validateArray[j].toLowerCase() == "cannull")
{
cannullFlag = true;
arrIndex = j;
}
}
if (cannullFlag)
{
if (!isNaN(arrIndex))
{
validateArray.splice(arrIndex, 1);
}
var errmsg = "";
var vflag = $ele.val() == null || $ele.val() == undefined || $.trim($ele.val()).length == 0;
this.validateCompleted($ele, validateFlag1, promptType, errmsg, false);
if (vflag)
{
return true;
}
}
}
for (var i = 0; i < validateArray.length; i++)
{
if ($.trim(validateArray[i].toString()).length == 0)
{
continue;
}
var validateFlag1 = true;
switch (validateArray[i].toString().trim().toLowerCase())
{
case "notnull":
case "notempty":
case "null":
case "empty":
var errmsg = $ele.attr("errmsg") || "不能为空";
validateFlag1 = this.isNotEmpty($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "int":
case "integer":
var errmsg = $ele.attr("errmsg") || "只能是整数";
validateFlag1 = this.isInt($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "positiveint":
var errmsg = $ele.attr("errmsg") || "只能是正整数";
validateFlag1 = this.isPositiveInt($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "negativeint":
var errmsg = $ele.attr("errmsg") || "只能是负整数";
validateFlag1 = this.isNegativeInt($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "decimal":
case "numeric":
case "float":
case "double":
var errmsg = $ele.attr("errmsg") || "只能是有效数字";
validateFlag1 = this.isDigital($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "positivefloat":
var errmsg = $ele.attr("errmsg") || "只能是正实数";
validateFlag1 = this.isPositiveFloat($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "negativefloat":
var errmsg = $ele.attr("errmsg") || "只能是负实数";
validateFlag1 = this.isNegativeFloat($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "chinese":
var errmsg = $ele.attr("errmsg") || "只能是汉字";
validateFlag1 = this.isChinese($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "mail":
case "email":
var errmsg = $ele.attr("errmsg") || "邮箱格式错误";
validateFlag1 = this.isEmail($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "phone":
case "mobile":
case "phonenumber":
case "mobilenumber":
var errmsg = $ele.attr("errmsg") || "手机号码错误";
validateFlag1 = this.isPhoneNumber($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "ip":
var errmsg = $ele.attr("errmsg") || "IP地址格式错误";
validateFlag1 = this.isIp($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "datetime":
var errmsg = $ele.attr("errmsg") || "日期时间格式错误";
validateFlag1 = this.isDateTime($ele.val());
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "let":
var let = $ele.attr("validate_let") || "0";
let = parseInt(let);
if (!let) let = 0;
var errmsg = $ele.attr("errmsg") || "不能小于" + let + "个字符";
validateFlag1 = this.isLet($ele.val(), let);
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "get":
var get = $ele.attr("validate_get") || "0";
get = parseInt(get);
if (!get) get = 0;
var errmsg = $ele.attr("errmsg") || "不能大于" + get + "个字符";
validateFlag1 = this.isGet($ele.val(), get);
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "ajax":
var url = $ele.attr("validate_url");
var validateResult = this.isAjax($ele.val(), url);
validateFlag1 = validateResult[0];
var errmsg = $ele.attr("errmsg") || validateResult[1];
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "equal":
var equalid = $ele.attr("validate_equalfor");
var $equalobj = $("#" + equalid.trim());
var val = $equalobj != null && $equalobj.size() > 0 ? $equalobj.val() : "";
validateFlag1 = this.isEqual($ele.val(), val);
var errmsg = $ele.attr("errmsg") || "验证错误";
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "checkbox":
var errmsg = $ele.attr("errmsg") || "至少选择一项";
validateFlag1 = this.validateCheclbox($ele);
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "radio":
var errmsg = $ele.attr("errmsg") || "必须选择一项";
validateFlag1 = this.validateRadio($ele);
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
case "editor":
var errmsg = $ele.attr("errmsg") || "不能为空";
validateFlag1 = UE.getEditor($element.attr("id")).hasContents();
//validateFlag1 = $.trim(html).length > 0;
this.validateCompleted($ele, validateFlag1, promptType, errmsg, true);
break;
}
if (!validateFlag1)
{
return false;
}
}
return true;
};
this.validateCompleted = function ($element, isSuccess, promptType, errMessage, showInfo)
{
if (promptType == undefined)
{
promptType = 1;
}
switch (promptType)
{
case 0:
if (!isSuccess)
{
window.alert(errMessage);
try { $element.focus(); } catch (e) { }
}
break;
case 1:
case 2:
var $span = $element.nextAll(".validate,.validate1,.validate2");
if ($span.size() > 0)
{
$span.first()
}
else
{
$span = $('');
$element.parent().append($span);
}
if (promptType == 1)
{
$span.text(isSuccess ? "" : errMessage);
if (showInfo)
{
//如果验证成功则不显示任何信息,如果要显示则将 validate改为validate1
$span.removeClass().addClass(isSuccess ? "validate" : promptType == 1 ? "validate2" : "validate3");
}
else
{
$span.removeClass().addClass("validate");
}
}
else
{
if (!isSuccess)
{
$span.text("").attr("title", errMessage);;
$span.removeClass("").addClass("validate3");
}
else
{
$span.removeClass("").addClass("validate").remove();
}
}
break;
}
};
this.isNotEmpty = function (val)
{
return val != null && val != undefined && $.trim(val.toString()).length > 0;
};
this.isDigital = function (val)
{
return this.isInt(val) || this.isFloat(val);
};
this.isInt = function (val)
{
var reg = /^(-|\+)?\d+$/;
return reg.test(val);
};
this.isPositiveInt = function (val)
{
return this.isInt(val) && parseInt(val) >= 0;
};
this.isNegativeInt = function (val)
{
return this.isInt(val) && parseInt(val) < 0;
};
this.isFloat = function (val)
{
var reg = new RegExp("^[0-9]*\.[0-9]+$");
return reg.exec(val) && this.isInt($.trim(val).substring(0, 1));
};
this.isPositiveFloat = function (val)
{
return (this.isFloat(val) || this.isInt(val)) && parseFloat(val) >= 0;
};
this.isNegativeFloat = function (val)
{
return (this.isFloat(val) || this.isInt(val)) && parseFloat(val) < 0;
};
this.isChinese = function (val)//是否为中文
{
var reg = /^[\u0391-\uFFE5]+$/;
return reg.test(val);
};
this.isEmail = function (val)//是否为email
{
var reg = /^[-_A-Za-z0-9\.]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/;
return reg.test(val);
};
this.isIp = function (val)//是否为IP
{
var check = function (v) { try { return (v <= 255 && v >= 0); } catch (x) { return false; } }
var re = val.split("."); return (re.length == 4) ? (check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])) : false;
};
this.isPhoneNumber = function (val)//是否为手机号码
{
return /^13\d{9}$/g.test(val) || (/^15[0-35-9]\d{8}$/g.test(val)) || (/^18[00-9]\d{8}$/g.test(val))
};
this.isDateTime = function (val)
{
return true;
};
this.isAjax = function (val, url)
{
var txt = "";
$.ajax({ url: url, async: false, type: "POST", data: { "value": val }, cache: false, complete: function (response)
{
txt = $.trim(response.responseText);
}
});
return ["1" == txt || "true" == txt, txt];
};
this.isLet = function (val, let)
{
if (!this.isNotEmpty(val) || !this.isInt(let))
{
return false;
}
return $.trim(val).length >= parseInt(let);
};
this.isGet = function (val, get)
{
if (!this.isNotEmpty(val) || !this.isInt(get))
{
return true;
}
return $.trim(val).length <= parseInt(get);
};
this.isEqual = function (val, val1)
{
return val === val1;
};
this.validateCheclbox = function ($e)
{
var name = $e.attr('name');
return $(":checkbox:checked[name='" + $.trim(name) + "']").size() > 0;
};
this.validateRadio = function ($e)
{
var name = $e.attr('name'); var flag = true;
return $(":radio:checked[name='" + $.trim(name) + "']").size() > 0;
};
}