//解决ajax提交前的验证问题,主要用于onclick事件时对某一区域中(可以是form,div,table中的等)控件的验证。(function ($) {
    var v;

    //Create a new Validator instance for jQuery
    v = $.FdyValidator = new FdyValidator();

    //extend all jQuery instance and so that all jQuery instance could execute validator
    //
    $.fn.extend({
        FormValidate: function (handler, custom_msg) {
            return v.FormValidate($(this).selector, handler, custom_msg);
        },
        InitValidate: function (handler, custom_msg) {
            return v.InitValidate($(this).selector, handler, custom_msg);
        }
    });
})(jQuery);

//class
function FdyValidator() {
    this.version = 1.0;
};

FdyValidator.Tag = { "TagName": "input", "AttrName": "validate" };

FdyValidator.prototype.InitValidate = function (form, handler, custom_msg) {
    var _form = form;
    var _handle = (handler || "follow").split(" ");  // should convert to arrary
    var _message = custom_msg || FdyValidator.message;
    //默认返回true
    var ret_val = true;
    var fail = 0;
    $(_form + " :" + FdyValidator.Tag["TagName"]).each(function () {
       // var succ = true;

        var attr = $(this).attr(FdyValidator.Tag["AttrName"]);
        if (typeof (attr) != "undefined") {
            //添加绑定
            $(this).blur(function () { FdyValidator.Validator($(this),_handle,_message) });
        }
    });
};

FdyValidator.Validator = function (item, handler, custom_msg) {
    var succ = true;
    var _handle = handler;  // should convert to arrary
    var _message = custom_msg || FdyValidator.message;
    var val = item.val();    //取得元素的值
    var attr = item.attr(FdyValidator.Tag["AttrName"]);
    var func_names = attr.split(" ");   //取得要验证的rules
    var msg;    //save message if error occured

    for (var i in func_names) {
        //遍历rules
        var msg_index = ["program"];    //默认一个数组存放错误索引
        succ = false;
        if (func_names[i] in FdyValidator.rules) {
            msg_index = [func_names[i]];
            //验证表达式是否正确
            if (FdyValidator.rules[func_names[i]].validate(item, val, msg_index))
                succ = true;
        }
        if (!succ) {
            //验证不通过
            if (msg_index[0] in _message)
                msg = _message[msg_index[0]];
            else
                msg = _message["unknown"];

            for (var j in _handle) {
                if (_handle[j] in FdyValidator.ErrorHandle) {
                    FdyValidator.ErrorHandle[_handle[j]](item, succ, msg);
                }
            }
            break;
        }
        else {
            FdyValidator.ErrorHandle["remove"](item);
        }

    }
}

FdyValidator.prototype.FormValidate = function (form, handler, custom_msg) {
    var _form = form;
    var _handle = (handler || "follow").split(" ");  // should convert to arrary
    var _message = custom_msg || FdyValidator.message;
    //默认返回true
    var ret_val = true;
    var fail = 0;
    $(_form + " :" + FdyValidator.Tag["TagName"]).each(function () {
        var succ = true;

        var attr = $(this).attr(FdyValidator.Tag["AttrName"]);
        if (typeof (attr) != "undefined") {
            var val = $(this).val();    //取得元素的值
            var func_names = attr.split(" ");   //取得要验证的rules
            var msg;    //save message if error occured

            for (var i in func_names) {
                //遍历rules
                var msg_index = ["program"];    //默认一个数组存放错误索引
                succ = false;
                if (func_names[i] in FdyValidator.rules) {
                    msg_index = [func_names[i]];
                    //验证表达式是否正确
                    if (FdyValidator.rules[func_names[i]].validate($(this), val, msg_index))
                        succ = true;
                }
                if (!succ) {
                    //验证不通过
                    fail = parseInt(fail) + 1;
                    if (msg_index[0] in _message)
                        msg = _message[msg_index[0]];
                    else
                        msg = _message["unknown"];

                    for (var j in _handle) {
                        if (_handle[j] in FdyValidator.ErrorHandle) {
                            FdyValidator.ErrorHandle[_handle[j]]($(this), succ, msg);
                        }
                    }
                    break;
                }
                else {
                    FdyValidator.ErrorHandle["remove"]($(this));
                }

            }

            ret_val = ret_val && succ;
        }

    });
    return fail == 0;
};

FdyValidator.InnerValidate = function (str, rule) {
    if (str == "")
        return true;
    var re = new RegExp(rule);
    return (re.test(str));
};

FdyValidator.rules = {
    "required": {   //must be filled
        reg: /^[ ]+$/,
        validate: function (element, str) { if (str == "") return false; return (!FdyValidator.InnerValidate(str, this.reg)); }
    },
    "email": {      // email
        reg: /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/,
        validate: function (element, str) { return (FdyValidator.InnerValidate(str, this.reg)); }
        //validate=FdyValidator.InnerValidate
    },
    "cardno": {     // cardno for campus card
        reg: /^\d+$/,
        validate: function (element, str) { return (FdyValidator.InnerValidate(str, this.reg)); }
    },
    "cardpwd": {   // password for campus card
        reg: /^\d{6}$/,
        validate: function (element, str) { return (FdyValidator.InnerValidate(str, this.reg)); }
    },
    "cname": {    // chinese name
        reg: /[\u4e00-\u9fa5]/,
        validate: function (element, str) { return (FdyValidator.InnerValidate(str, this.reg)); }
    },
    "integer": {  // integer, max & min is optional
        reg: /^[0-9]*[1-9][0-9]*$/,
        validate: function (element, str, msg_index) {
            var ret_val;
            var msg = msg_index[0] || "integer";

            ret_val = FdyValidator.InnerValidate(str, this.reg);

            var value = parseInt(str || 0);
            var min_val = 0, max_val = 0;

            if (typeof (element.attr("min")) != "undefined") {
                min_val = parseInt(element.attr("min"));
                msg_index.push(min_val.toString());
                if (value < min_val)
                    ret_val = false;
                msg = msg + "_min";
            }

            if (typeof (element.attr("max")) != "undefined") {
                max_val = parseInt(element.attr("max"));
                msg_index.push(max_val.toString());
                if (value > max_val)
                    ret_val = false;
                msg = msg + "_max";
            }
            msg_index[0] = msg;
            return ret_val;
        }
    },
    "ip": { //ip address
        reg: /^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/,
        validate: function (element, str) { return (FdyValidator.InnerValidate(str, this.reg)); }
    },
    "username": { // user name
        reg: /^[a-z]\w{2,18}$/,
        validate: function (element, str) { return (FdyValidator.InnerValidate(str, this.reg)); }
    }
};

FdyValidator.message = {
    "required": "此项为必填项,不能为空!",
    "email": "非法的EMail地址,请重新输入!",
    "cardno": "不正确的校园卡号,请重新输入!",
    "cardpwd": "不正确的校园卡密码,请重新输入!",
    "cname": "错误的中文名!",
    "integer": "请输入整数!",
    "integer_min": "请输入大于[ {0} ]的整数!",
    "integer_max": "请输入小于[ {0} ]的整数!",
    "integer_min_max": "请输入[ {0} - {1} ]之间的整数!",
    "ip": "请输入正确的IP地址",
    "username": "请输入以字母开头,后续可以包括下划线、字母、数字的最少三位,最长19用户名,",
    "program": "程序错误(非法的验证属性),请检查!",
    "unknown": "未定义错误!",
    "success": "验证通过!"
};

FdyValidator.ErrorHandle = {
    "follow": function (item, succ, msg) {

        if (item.next("label").length > 0) {
            item.next("label").remove();  //remove prompt if existed
        }
        if (!succ)
            $("<label class='error'></label>").attr("for", item.attr("id")).text(msg).insertAfter(item);
        item.attr("class",item.attr("class") + " error");

    },
    "remove": function (item)
    {
        if (item.next("label").length > 0) {
            item.next("label").remove();  //remove prompt if existed
            item.attr("class",FdyValidator.StrHandle["removeCss"](item.context.className));
        }
    }
};

FdyValidator.StrHandle = {
    "removeCss": function (css) {
        var new_css = "";
        var strs = new Array();
        strs = css.split(" ");
        for (i = 0; i < strs.length ; i++)
        {
            if (strs[i] != "error") {
                new_css += strs[i] + " ";
            }
        }
        return new_css;
    }
};
 input.error { border: 1px dotted red; }   

      label.error {    color: red; }  

使用方法:

 <input id="email" type="text"  name="email" validate="required email"/></td>
在jquery.form.js
ajaxSubmit()提交前的验证
var t = $("#form1").FormValidate();
t = false不继续
只要onclick事件

页面初始化时的验证

$(document).ready(function () {
            $("#form1").InitValidate();
        });

验证控件,解决用于ajax提交前的验证,不是submit提交的验证的更多相关文章

  1. ASP.NET_验证控件(class0620)

    为什么使用验证控件 当需要让用户输入数据时,用户有可能输入不符合我们程序逻辑要求的信息,所以我们要对输入进行验证. 客户端验证(用户体验,减少服务器端压力) 服务器端验证(防止恶意攻击,客户端js很容 ...

  2. 初识 Asp.Net数据验证控件

    在我们建立一个Asp.Net Web应用程序的时候我一般都会注意我们工具如图

  3. 016. asp.net的验证控件

    RequiredFileldValidator: 检查某个字段是否输入; 空值检查 主要属性: ControlToValidate:要验证的控件 ErrorMessage:错误提示信息 Compare ...

  4. ASP.NET中验证控件的使用

    转自:http://www.cnblogs.com/yangmingming/archive/2010/03/09/1682006.html 前言: 前几日,无奈用JS判断控件的有效性,发现的确是一件 ...

  5. 【转】ASP.NET中验证控件的使用

    前言: 前几日,无奈用JS判断控件的有效性,发现的确是一件费力.费神的事情!特别是针对邮件格式.邮政编码等的关于正则表达式的JS验证(其中涉及正则表达式的比较等,较烦~).其实对于这些常用的控件有效性 ...

  6. ASP.NET验证控件一

    为了更好地创建交互式Web应用程序.加强应用程序安全性,程序开发人员应该对用户输入的内容进行验证. ASP.NET提供了一系列输入验证控件,使用这些控件用户可以很方便地实现输入验证. ASP.NET还 ...

  7. Js表单验证控件-02 Ajax验证

    在<Js表单验证控件(使用方便,无需编码)-01使用说明>中,写了Verify.js验证控件的基本用法,基本可以满足大多数验证需求,如果涉及服务端的验证,则可以通过Ajax. Ajax验证 ...

  8. 验证控件插图扩展控件ValidatorCalloutExtender(用于扩展验证控件)和TextBoxWatermarkExtender

    <asp:ScriptManager ID="ScriptManager1" runat="server">  </asp:ScriptMan ...

  9. 当有“Button1.Attributes.Add("onclick", "return confirm('你确定要保存修改吗?')");”时,验证控件失效的解决方法

    同一个页面用Js和服务器验证控件OnClientClick提交问题 实现功能:        点击Button按钮的OnClientClick事件,不会影响服务器验证控件的验证功能           ...

随机推荐

  1. innerHTML 与 innerText 的区别

    innerHTML指的是从对象的起始位置到终止位置的全部内容,包括Html标签.innerText 指的是从起始位置到终止位置的内容,但它去除Html标签.同时,innerHTML 是所有浏览器都支持 ...

  2. 关于 error: Operation is not valid due to the current state of the object。

    今天碰到一个特别的异常. Operation is not valid due to the current state of the object. at System.Web.HttpValueC ...

  3. JAVA自定义异常

    创建自定义异常是为了表示应用程序的一些错误类型,为代码可能发生的一个或多个问题提供新含义. 可区分代码运行时可能出现的相似问题的一个或多个错误,或给出应用程序中一组错误的特定含义. //自定义异常类需 ...

  4. HDU2527 哈夫曼编码

    Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  5. 20145205 《Java程序设计》第9周学习总结

    教材学习内容总结 第十六章 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC目的:让Java程序设计人员在撰写数据库操作程序时可以有个统一的接口,无须依赖特 ...

  6. 【Java】实战Java虚拟机之五“开启JIT编译”

    今天开始实战Java虚拟机之五“开启JIT编译” 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实战Ja ...

  7. soui使用wke时,设置js回调注意事项

    wke响应网页js函数调用时注意: 必须等网页加载完成后,才能通过SetJsFunc设置js函数与c++回调的对应.网页未加载就设置,不会响应c++函数. 示例代码: wkeJSData* data ...

  8. python - socket - connection

    前面有了TCP server和TCP client.在这个文章中我们建立tcp连接并且进行数据的发送. 例子,经常用到的echo功能.TCP client连接到server, 向server发送mes ...

  9. C# 反射之调用方法谈

    反射的定义 反射提供了描述程序集.模块和类型的对象(Type 类型). 可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性. 如果代码中使用了特性 ...

  10. robot创建桌面图标(转载)

    桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...