//解决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. js 类型转换学习

    类型转换分为显示转换和隐式转换 参考http://www.cnblogs.com/mizzle/archive/2011/08/12/2135885.html 先事件显示的 通过手动进行类型转换,Ja ...

  2. Jquery事件:鼠标移入移出(mouseenter,mouseleave)

    前几天帮朋友做了一个单页面,其中有个效果就是鼠标移动到头像上变换头像样式,当鼠标移出时恢复头像样式.当时没多想,脑子就蹦出了mouseover,mouseout两个方法. 但是在编写页面的过程中,无论 ...

  3. 后台发送POST,DELETE,GET,PUT请求

    public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, int> para ...

  4. Pow(x, n)

    Implement pow(x, n). public class Solution { public double pow(double x, int n) { //判断x是不是0 if(Math. ...

  5. Hive_数据倾斜处理

    Hive中三种join map join (小表join大表,将小表加入到内存) 设置map join: hive.auto.convert.join=true hive.mapjoin.smallt ...

  6. Lua数据持久化

      1.数据文件 我们可以利用Lua中的table构造式来定义一种文件格式,即文件中的数据是table构造并初始化的代码 ,这种方式对于Lua程序而言是非常方便和清晰的,如: Entry{" ...

  7. CI框架入门2

    文件目录与布局 1.user_guide    用户手册,可删 2.readme.rst    说明,可删 3.license.txt     证书,可删 4..gitignore composer. ...

  8. apidoc

    1.安装node http://nodejs.cn/download/ 下载二进制包,解压,配置环境 export NODE_HOME=/usr/local/nodeexport PATH=$NODE ...

  9. How to change hostname on SLE

    修改/etc/HOSTNAME文件,在此文件中保存主机名,例如: linuxserv1 然后运行命令设置主机名 # /etc/rc.d/boot.localnet start 方法3. 运行 sysc ...

  10. 关于 windows 下 node_modules\node-sass\vendor 的报错解决方法

    项目git clone下来之后,运行npminstall, npm start报错代码如下: ERROR in ENOENT: no such file or directory, scandir ' ...