一些JS常用的方法

来源:互联网 发布:网络销售股票是否违法 编辑:程序博客网 时间:2024/05/07 11:30
/**
 * JS公用类库文件
 */
  
(function(){
    Tools = {
        W: window,
        D: document,
        Postfix: ".php",
        GetId: function(id){return document.getElementById(id)},
        hi:function(){alert('Hi')},
  
        /**
         * 验证类
         */
        Check: {
            /**
             * 验证表单输入框的值是否与指定值相符
             * @param name 要验证的输入框的name
             * @param value 要验证的值
             * @param message 验证失败时弹出的消息提示
             * @returns {boolean} 若与给定值相等,则返回true,不相等则返回false
             */
            input: function(name,value){
                var input = $(":input[name='"+name+"']");
                if(input.val() == value){
                    input.focus();
                    return true;
                }
                return false;
            },
  
            /**
             * 验证输入框的值是否为手机号码的格式
             * @param name 要验证的输入框的name
             * @returns {boolean} 若不符合格式要求返回true,否则返回false
             */
            phone: function(name){
                /*
                 * 联通号段:130/131/132/155/156/185/186/145/176;
                 * 电信号段:133/153/180/181/189/177;
                 * 移动号段:134/135/136/137/138/139/150/151/152/157/158/159/182/183/184/187/188/147/178
                 */
                var reg = /^1(30|31|32|55|56|85|86|45|76|33|53|80|81|89|77|34|35|36|37|38|39|50|51|52|57|58|59|82|83|84|87|88|47|78)[0-9]{8}$/;
                var input = $(":input[name='"+name+"']");
                if(!reg.test(input.val())){
                    input.focus();
                    return true;
                }
                return false;
            },
  
            /**
             * 验证输入框的值是否为邮箱格式
             * @param name 要验证的输入框的name
             * @returns {boolean} 若不符合格式要求返回true,否则返回false
             */
            email: function(name){
                var reg = /^[a-zA-Z0-9_]+@[a-z0-9]+\.[a-z]+$/;
                var input = $(":input[name='"+name+"']");
                if(!reg.test(input.val())){
                    input.focus();
                    return true;
                }
                return false;
            },
  
            /**
             * 验证输入框的值是否符合用户名的格式要求
             * @param name ~
             * @returns {boolean} ~
             */
            username: function(name){
                var reg = /^[a-zA-Z][a-zA-z0-9]{4,15}$/;
                var input = $(":input[name='"+name+"']");
                if(!reg.test(input.val())){
                    input.focus();
                    return true;
                }
                return false;
            },
  
            /**
             * 验证输入框的值是否符合密码格式要求
             * 格式要求:不能为纯数字,不能为纯字符,不能为纯标点符号,不能小于6位,不能大于18位
             * @param name ~
             * @returns {boolean} ~
             */
            password: function(name){
                var reg = /^([A-Z]+)$|^([a-z]+)$|^([0-9]+)$|^([-`=\\\[\];',\.\/~!@#\$%\^&\*\(\)_+\|\{}:"<>\?]+)$|^.{0,6}$|^.{18,}$/
                var input = $(":input[name='"+name+"']");
                if(reg.test(input.val())){
                    input.focus();
                    return true;
                }else{
                    return false;
                }
            },
  
            /**
             * 验证输入框的值是否符合身份证格式要求
             * @param name ~
             * @returns {boolean} ~
             */
            identification: function(name){
                var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外 "};
                var input = $(":input[name='" + name + "']");
                var code = Ident.val();
  
                if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
                    input.focus();
                    return true;
                }
  
                else if(!city[code.substr(0,2)]){
                    input.focus();
                    return true;
                }
                else{
                    //18位身份证需要验证最后一位校验位
                    if(code.length == 18){
                        code = code.split('');
                        //∑(ai×Wi)(mod 11)
                        //加权因子
                        var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
                        //校验位
                        var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
                        var sum = 0;
                        var ai = 0;
                        var wi = 0;
                        for (var i = 0; i < 17; i++)
                        {
                            ai = code[i];
                            wi = factor[i];
                            sum += ai * wi;
                        }
                        var last = parity[sum % 11];
                        if(parity[sum % 11] != code[17]){
                            input.focus();
                            return true;
                        }
                    }
                }
                return false;
            }
        },
  
        /**
         * 用户中心类
         */
        Member: {
  
            /**
             * 登录方法
             * @param username 用户名输入框的name
             * @param password 密码输入框的name
             * @param requestURL 验证地址
             * @param locationURL 通过后的跳转地址
             * @returns {boolean}
             */
            login: function(username, password, requestURL, locationURL){
                var usernameInput = $(":input[name='" + username + "']");
                var passwordInput = $(":input[name='" + password + "']");
                if(Tools.Check.username(username)){
                    alert("用户名格式不符合要求");
                    return false;
                }
                if(Tools.Check.password(password)){
                    return false;
                }
                $.ajax({
                    url:requestURL,
                    type:"POST",
                    data:{
                        request:"Login",
                        username:usernameInput.val(),
                        password:passwordInput.val()
                    },
                    dataType:"json",
                    success:function(data){
                        if(data.state != 200){
                            alert(data.message);
                            return false;
                        }else{
                            location.href= locationURL;
                        }
                    }
                });
            },
            logout:function(URL){
                location.href = URL;
            }
        },
  
        Public: {
  
            /**
             * 复选框全选/反选方法
             * @param className 每组复选框的className
             * @param action 全选或反选操作,值为真则全选,值为假则反选
             */
            boxAllSel: function(className,action){
                var boxList = $(":input[type='checkbox']." + className);
                if(action){
                    for(var I in boxList){
                        boxList[I].checked = true;
                    }
                }else{
                    for(var I in boxList){
                        boxList[I].checked = boxList[I].checked ? false : true;
                    }
                }
            },
  
            /**
             * 批量请求方法,使用方法:
             * 将下拉菜单option的值设置为此种格式:请求地址:请求标识:弹出提示的消息内容:是否接收输入:接收输入时显示的消息:接收输入时的默认值
             * 请求地址:要发送到的URL地址,注意不要加后缀名。如action.php只需写action即可,后缀名在Tools中统一设置
             * 请求标识:本次请求发送的处理标识信息
             * 是否接收输入:true or false
             * @param o 操作列表的对象,如果直接在select对象上调用,传入this即可
             * @param className 复选框组的className
             */
            requests: function(o,className){
                //批量请求
                //url.request.message.input.inputMessage.inputValue
                var data = $("."+ className +":checked").serialize();
                if(data == ''){
                    alert("您没有选中任何项");
                    o.value = o.options[0].value;
                    return;
                }
                var tempArr = O.value.split('.');
                if(!tempArr[0] || !tempArr[1]){
                    //验证URL及动作
                    alert("错误:缺少必须参数");
                    o.value = o.options[0].value;
                    return;
                }
                data += "&request=" + tempArr[1];
                var message = "确认删除选中项吗?";
                if(tempArr[2]){
                    //验证并设置提示消息
                    message = tempArr[2];
                }
                if(confirm(message)){
                    var input = false;
                    if(tempArr[3]){
                        //验证并设置是否接收用户输入
                        input = true;
                    }
                    if(input == 'True'){
                        var inputVal = prompt(tempArr[4],tempArr[5]);
                        data += "&input=" + inputVal;
                    }
                    $.ajax({
                        url:"./"+tempArr[0] + Tools.Postfix,
                        type:'GET',
                        data:data,
                        dataType:'json',
                        async:false,
                        success:function(data){
                            alert(data.message);
                            location.reload(true);
                        }
                    });
                }
            },
  
            /**
             * 单词请求
             */
            request: {
                Data : '',
                MetHod : '',
                DataType : '',
                Async : '',
  
                /**
                 * 设置请求参数
                 * @param options 请求时发送的参数对象
                 * @param method 请求方式,默认GET
                 * @param dataType 接收数据类型,默认json
                 * @param async 是否异步,默认为true
                 * @returns {Tools} 返回对象本身,以供调用send
                 */
                setData:function(options,method,dataType,async){
                    this.Data = options;
                    this.MetHod = typeof method == 'undefined' ? 'GET' : method;
                    this.DataType = typeof dataType == 'undefined' ? 'json' : dataType;
                    this.Async = typeof async == 'undefined' ? true : async;
                    return this;
                },
  
                /**
                 * 发送请求
                 * @param Url 请求地址
                 * @param call 成功回调函数,可不设
                 * @param alertMessage 是否弹出确认对话框
                 * @param message 确认对话框内容
                 */
                send:function(Url,call,alertMessage,message){
                    if(!message){
                        message = "确认删除吗?";
                    }
                    if(typeof call != 'function'){
                        call = function(data){
                            switch(this.dataType){
                                case 'text' :alert(data);break;
                                default :alert(data.message);break
                            }
                            location.reload(true);
                        }
                    }
                    var alertControl = true; //控制是否弹出提示消息
                    var sendControl = true; //控制是否发送本次请求
                    var LId;
                    if(typeof alertMessage != 'undefined' && alertMessage == false){alertControl = false}
                    if(alertControl && !confirm(message)){sendControl = false;}
                    if(sendControl){
                        $.ajax({
                            url:Url,
                            type:this.MetHod,
                            data:this.Data,
                            dataType:this.DataType,
                            async:this.Async,
                            beforeSend:function(O){LId = Tools.Public.Loading.open();},
                            success:call,
                            error:function(E,Info,EO){alert(E.statusText + ":" + E.responseText);},
                            complete:function(O){Tools.Public.Loading.close(LId);}
                        });
                    }
                }
            },
  
            /**
             * 在input后添加描述文本框
             */
            Description: {
                DescId: '',
  
                /**
                 * 显示描述文字,可用于用户名/密码格式要求,在input标签上设置onfocus属性来使用
                 * @param o 使用该方法的对象,一般在input标签上使用是传入this对象
                 * @param message 显示的内容
                 */
                display: function(o,message){
                    var id = parseInt(Math.random() * 1000);
                    this.DescId = id;
                    var description = Tools.D.createElement('description');
                    description.id = id;
                    description.innerHTML = message;
                    description.style.width = "200px";
                    description.style.border = "1px solid #dfdfdf";
                    description.style.backgroundColor = "#fff";
                    description.style.lineHeight = "normal";
                    description.style.position = "absolute";
                    description.style.top = o.offsetTop + 'px';
                    description.style.marginLeft = "5px";
                    $(o).after(description);
                    o.setAttribute("onblur",'Tools.Public.Description.close()');
                },
                close: function(){
                    $("#"+this.DescId).remove();
                }
            },
  
            Loading : {
                WindowId:'',
                open: function(message){
                    var id = parseInt(Math.random() * 1000);
                    this.WindowId = id;
                    var div = Tools.D.createElement("div");
                    div.id = id;
                    div.style.width = "80%";
                    div.style.height = "50px";
                    div.style.backgroundColor = "#000";
                    div.style.opacity = "0.5";
                    div.style.borderRadius = "10px";
                    div.style.position = "fixed";
                    div.style.top = (Tools.W.innerHeight - 50) / 2 + "px";
                    div.style.left = "10%";
                    var pTag = Tools.D.createElement("p");
                    pTag.style.textAlign = "center";
                    pTag.style.color = "#fff";
                    pTag.style.lineHeight = "50px";
                    pTag.style.height = "50px";
                    pTag.style.margin = "0";
                    var imgTag = Tools.D.createElement('img');
                    imgTag.src = "/Public/images/loading.gif"; //在这里设置加载中图标
                    imgTag.style.marginBottom = "-5px";
                    if(message){
                        pTag.innerHTML = message;
                    }else{
                        pTag.innerHTML = "正在处理中";
                    }
                    pTag.appendChild(imgTag);
                    Tools.D.body.appendChild(div);
                    Tools.GetId(this.WindowId).appendChild(pTag);
                    return id;
                },
                close:function(id){
                    if(typeof id != 'undefined' && id != null){
                        Tools.D.body.removeChild(Tools.GetId(Id));
                    }else if(this.WindowId != ''){
                        Tools.D.body.removeChild(Tools.GetId(this.WindowId));
                    }
                }
            }
        }
    };
})();