/*
Copyright (C) 2009 - 2012
WebSite: Http://wangking717.javaeye.com/
Author: wangking
*/
$(function() {
var xOffset = -20; // x distance from mouse
var yOffset = 20; // y distance from mouse
//为控件初始化tip,
$("[regstyle]").each(function(i) {
if ($(this).attr('tip') == undefined) {
dstyle = $(this).attr('regstyle');
arrd = dstyle.split(';');
for (var key in arrd) {
if (arrd[key].split(':')[0].toLowerCase() == "tip" && arrd[key].split(':').length > 1) {
$(this).attr('tip', arrd[key].split(':')[1]); break;
}
}
}
});
//input action
$("[regstyle]").hover(
function(e) {
$("p#vtip").remove();
if ($(this).attr('tip') != undefined) {
var top = (e.pageY + yOffset);
var left = (e.pageX + xOffset);
$('body').append(' ' + $(this).attr('tip') + ' ');
$('p#vtip').css("top", top + "px").css("left", left + "px").css("display", "block").css("position", "absolute");
}
},
function() {
if ($(this).attr('tip') != undefined) {
$("p#vtip").remove();
}
}
).mousemove(
function(e) {
if ($(this).attr('tip') != undefined) {
var top = (e.pageY + yOffset);
var left = (e.pageX + xOffset);
$("p#vtip").css("top", top + "px").css("left", left + "px").css("position", "absolute");
}
}
).blur(function() {
validate($(this));
});
$("form").submit(function() {
return validateAll();
});
});
function validateAll() {
var isSubmit = true;
$("[regstyle]").each(function() {
if (!validate($(this))) {
if (!($("#"+ $(this).attr("id")+"h").length > 0 && $("#"+ $(this).attr("id")+"h").val()!="" ))
isSubmit = false;
}
});
return isSubmit;
}
function validate(obj) {
var objValue = obj.attr("value");
dstyle = obj.attr('regstyle');
arrd = dstyle.split(';');
var reg = "",regInfo="",ajax="";
for (var key in arrd) {
if (arrd[key].split(':').length < 2) continue;
akey = arrd[key].split(':')[0].toLowerCase();
avalue = arrd[key].split(':')[1];
switch (akey) {
case "datatype": //int|email|idcard|time|date|datetime|float|phone
if (reg != "") break;
switch (avalue.toLowerCase()) {
case "int":
reg = "^[0-9]*$";
regInfo = "请输入正整数";
break;
case "float": case "numeric":
reg = "^[-\\+]?\\d+(\\.\\d+)?$";
regInfo = "请输入数字";
break;
case "email":
reg = "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
regInfo = "邮件格式不符合要求";
break;
case "idcard":
//reg = "(^\d{18}$)|(^\d{17}(\d|X|x)$)";
regInfo = isIdCardNo(objValue);
if (regInfo != "") {
change_error_style(obj, "add");
change_tip(obj, regInfo, "add");
return false;
}
break;
case "time": //01:12:59 01:12
reg = "^(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])(:[0-5][0-9]){0,1}$";
regInfo = "请输入正确的时间,格式如:12:01:52 或 12:01";
break;
case "date":
reg = "^((19\\d\\d|2\\d\\d\\d)[-]([1][0-2]|[0]?[1-9])[-](0?[1-9]|[12][0-9]|3[01]))$";
regInfo = "请输入正确的日期,格式如:2012-02-10";
break;
case "datetime":
reg = "^((19\\d\\d|2\\d\\d\\d)[-]([1][0-2]|[0]?[1-9])[-](0?[1-9]|[12][0-9]|3[01]))(\\s)(([1-9]{1})|([0-1][0-9])|([1-2][0-3])):([0-5][0-9])(:[0-5][0-9]){0,1}$";
regInfo = "请输入正确的日期时间,格式如:2012-02-10 01:23:15";
break;
case "phone":
reg = "^(1)[0-9]{10}$";
regInfo = "手机号码不正确";
break;
case "en_num": //只能输入英文、数字及下划线
reg = "^[A-Za-z0-9_]*$";
regInfo = "只能输入英文字母及数字";
break;
case "cn": //只能输入中文
reg = "^[\\u0391-\\uFFE5]+$";
regInfo = "只能输入中文";
break;
case "url":
reg = "^http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?$";
regInfo = "请输入完整的网址";
break;
}
break;
case "reg":
reg = avalue;
break;
case "notnul":
if (avalue.toLowerCase() != "false" && objValue == "") {
change_error_style(obj, "add");
change_tip(obj, "必填项,不能为空", "add");
return false;
}
break;
case "fun": //扩展函数
eval("funs = " + avalue + "(obj);");
if (funs != "") {
change_error_style(obj, "add");
change_tip(obj, funs, "add");
return false;
}
break;
case "ajax": //ajax链接
ajax = avalue;
break;
case "min":
if (avalue.match(/\d+/)!=null && objValue.replace(/[^\x00-\xff]/g,'xx').length < parseInt(avalue)) {
change_error_style(obj, "add");
change_tip(obj, "长度须大于" + avalue + "个字符(一个汉字等于两个字符)!", "add");
return false;
}
break;
case "max":
if (avalue.match(/\d+/) != null && objValue.replace(/[^\x00-\xff]/g, 'xx').length > parseInt(avalue)) {
change_error_style(obj, "add");
change_tip(obj, "长度须小于" + avalue + "个字符(一个汉字等于两个字符)!", "add");
return false;
}
break;
}
}
if (reg != "") {
var reg1 = new RegExp(reg);
if (!reg1.test(objValue)) {
// alert("正则未通过" + reg);
change_error_style(obj, "add");
if (regInfo == "") change_tip(obj, null, "remove");
else change_tip(obj, regInfo, "add");
return false;
}
}
reg1 = new RegExp("[=+<>']");
if (reg1.test(objValue)) {
change_error_style(obj, "add");
change_tip(obj, "不允许输入“=+<>'”", "add");
return false;
}
if (ajax != "") {
return ajax_validate(obj, ajax);
}
change_error_style(obj, "remove");
change_tip(obj, null, "remove");
return true;
}
function ajax_validate(obj,url){
//frm.aspx?mytype=sfzh&sfzh=222222
var url_str = url;
if(url_str.indexOf("?") != -1){
url_str = url_str + "&mytype=" + obj.attr("name") + "&" + obj.attr("name") + "=" + obj.attr("value");
}else{
url_str = url_str + "?mytype=" + obj.attr("name") + "&" + obj.attr("name") + "=" + obj.attr("value");
}
//alert(url_str);
var feed_back = $.ajax({url: url_str,cache: false,async: false}).responseText;
feed_back = feed_back.replace(/(^\s*)|(\s*$)/g, "");
if(feed_back == ''){
change_error_style(obj,"remove");
change_tip(obj,null,"remove");
return true;
}else{
change_error_style(obj,"add");
change_tip(obj,feed_back,"add");
return false;
}
}
function change_tip(obj,msg,action_type){
if(obj.attr("tip") == undefined){//初始化判断TIP是否为空
obj.attr("is_tip_null","yes");
}
if(action_type == "add"){
if(obj.attr("is_tip_null") == "yes"){
obj.attr("tip",msg);
}else{
if(msg != null){
if(obj.attr("tip_bak") == undefined){
obj.attr("tip_bak",obj.attr("tip"));
}
obj.attr("tip",msg);
}
}
}else{
if(obj.attr("is_tip_null") == "yes"){
obj.removeAttr("tip");
obj.removeAttr("tip_bak");
}else{
obj.attr("tip",obj.attr("tip_bak"));
obj.removeAttr("tip_bak");
}
}
}
function change_error_style(obj,action_type){
if(action_type == "add"){
obj.addClass("input_validation-failed");
}else{
obj.removeClass("input_validation-failed");
}
}
$.fn.validate_callback = function(msg,action_type,options){
this.each(function(){
if(action_type == "failed"){
change_error_style($(this),"add");
change_tip($(this),msg,"add");
}else{
change_error_style($(this),"remove");
change_tip($(this),null,"remove");
}
});
};
///身份证号
function isIdCardNo(num) {
var len = num.length, re;
if (len == 18) {
if (isNaN(num.substr(0, 17))) { return "输入的身份证号不合法!"; }
re = new RegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);
}
else {
return "输入的字符位数不对!";
}
var a = num.match(re);
if (a != null) {
if (len == 15) {
var D = new Date("19" + a[3] + "/" + a[4] + "/" + a[5]);
var B = D.getYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5];
}
else {
var D = new Date(a[3] + "/" + a[4] + "/" + a[5]);
var B = D.getFullYear() == a[3] && (D.getMonth() + 1) == a[4] && D.getDate() == a[5];
}
if (!B) { return "输入的身份证号 " + a[0] + " 里出生日期不对!"; }
}
if (len == 18 && createCK(num).toUpperCase() != num.substr(17, 1).toUpperCase()) return "输入的身份证号不合法";
return "";
}
function createCK(strID) {
var s = 0;
var WI = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
var AI = "10X98765432";
for (i = 0; i < 17; i++) {
j = strID.substr(i, 1) * WI[i];
s = s + j;
}
s = s % 11;
return AI.substr(s, 1);
}
|