经常用到的一些js方法

//#######################计算类##############################################################
//js运算经常容易内存溢出,使用以下方法进行四则运算就可以避免了
//放置位置:任意可以放的位置
//返回值:arg1加上arg2的精确结果 
function accAdd(arg1, arg2) {
    var r1, r2, m;
    try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2))
    return (arg1 * m + arg2 * m) / m
}
//返回值:arg1减上arg2的精确结果 
function accSub(arg1, arg2) {
    return accAdd(arg1, -arg2);
}

//返回值:arg1乘以arg2的精确结果 
function accMul(arg1, arg2) {
    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    try { m += s1.split(".")[1].length } catch (e) { }
    try { m += s2.split(".")[1].length } catch (e) { }
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}
//返回值:arg1除以arg2的精确结果 
function accDiv(arg1, arg2) {
    var t1 = 0, t2 = 0, r1, r2;
    try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
    try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
    with (Math) {
        r1 = Number(arg1.toString().replace(".", ""))
        r2 = Number(arg2.toString().replace(".", ""))
        return (r1 / r2) * pow(10, t2 - t1);
    }
}


//################验证是否为空#########################################################################################

//使用本脚本前,请引入jquery1.4以上版本
//请不要把本脚本放在<head>中,最佳位置是放在</body>之前
//使用本脚本,需要引入valide.css
//检查带有need的class,默认检查所有带need样式名的控件,如果想只验证某指定范围,指定customerRange即可。当满足条件时,将会把所有的
//带need的对象给添加一个input_red的class,并移除当前的input,将光标定位到第一个值为空的对象上
//使用方法:假设页面中有一个id为mydiv的div,我们要验证它里面包含的带.need的控件,这样写即可:ckEmpoty("#mydiv");
//注意,ckEmpoty返回的是bool类型,如果是验证表格的单行数据,请用下面的ckTabEmpty
function ckEmpoty(customerRange) {
    var obj = $(".need:enabled:visible");
    if (customerRange != "") {
        obj = $(customerRange + " .need:enabled:visible");
    }
    if (obj.length > 0) {
        for (var i = 0; i < obj.length; i++) {
            if ($.trim(obj.eq(i).val()) == "")
                obj.eq(i).addClass("input_red");
        }
    }
    var a = false;
    var redObj = $(customerRange + " .input_red");
    if (redObj.length > 0) {
        redObj.eq(0).focus();
    }
    else {
        a = true;
    }
    return a;
}

//检查指定范围中必须控件是否为空,本方法比较适用于验证table中单行数据,比如我们现在修改了某一些,然后提交当前行,
//如果用上面的方法,会验证整个表格中的数据是否合法
//使用方法:先获取到当前控件所在的行,然后作为参数传入即可
//eg: var pobj=$(this).parent().parent();ckTabEmpty(pobj);
//说明:用了两次parent(),是因为控件一般放在td中,控件的父容器是td,td的父容器是tr,所以pobj就是当前行了
//当然,如果要验证的控件在td的其它容器内,则需要用更多次parent(),总之,保证传入的对象是tr即可
function ckTabEmpty(rangeStr) {
    var obj = rangeStr.find(".need:enabled:visible");
    if (obj.length > 0) {
        for (var i = 0; i < obj.length; i++) {
            if ($.trim(obj.eq(i).val()) == "")
                obj.eq(i).addClass("input_red");
        }
    }
    var a = false;
    var redObj = rangeStr.find(".input_red");
    if (redObj.length > 0) {
        redObj.eq(0).focus();
    }
    else {
        a = true;
    }
    return a;
}

//验证某个容器中必须有一个或指定个数的checkbox不为空
//参数num为需要选中的个数
//因为一个页面中有可能有多个这样多选的情况,每个多选的限制可能不一样,有的只需选一个,有的需要几个以上,所以用一个容器来区分
function ckCheckboxInContainer(num, container) {
    if (isNaN(num)) return false; //如果不是数字,直接为假
    var obj = $(container).find(":checked");
    if (obj.length < num)
        return false;
    return true;
}

//本方法为上传图片的功能而写。当上传了图片后,图片预览框(div)内会有图片标记,而为空的div中是没有的
//上传图片时,预览图片的容器都有一个class="previews",本方法就以这个来获取已上传的图片个数
//注意:container为上传图片区域那里最大的一个容器
function ckEmptyDiv(num, container) {
    if (isNaN(num)) return false; //如果不是数字
    var obj = $(container).find(".pdaddp_previews");
    var count = 0;
    var img;
    for (var i = 0; i < obj.length; i++) {
        if (count >= num)
            return true; //大于等于num就可以了
        img = obj.eq(i).html();
        if (img.indexOf("img") >= 1) {
            count++; //如果内容不为空,则计数器加1
        }
    }
    if (count >= num)
        return true;
    else
        return false;
}

//当带有need的class的对象值不再为空时,自动移除input_red
$(".need:enabled:visible").live("keyup", function () {
    var obj = $(this);
    if ($.trim(obj.val()) != "") {
        obj.removeClass("input_red");
    }
    else {
        obj.addClass("input_red");
    }
});

//当鼠标离开时,带有need的class的对象值不再为空时,自动移除input_red
$(".need:enabled:visible").live("blur", function () {
    var obj = $(this);
    if ($.trim(obj.val()) != "") {
        obj.removeClass("input_red");
    }
});



//##################################常用格式验证########################################################################
///本脚本为验证格式脚本,需要先引入jquery1.4以上版本
///放置本脚本的最佳位置是</body>之前
//使用方法,给要验证的控件加相应的样式名即可,eg:class="email"表示是用邮箱格式来验证
//邮箱
$(".email:enabled:visible").live("change", function () {
    var em = $(this).val();
    var reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
    if (!reg.test(em)) {
        alert('邮箱不正确');
        $(this).focus();
        return;
    }


});

//邮编
$(".zip:enabled:visible").live("change", function () {
    var zip = $(this).val();
    if (zip != null && zip != "") {
        if (zip.length != 6) {
            alert("邮编位数不对");
            $(this).focus();
            return false;
        }
        else {
            var rexTel = /^[0-9]+$/;
            if (!rexTel.test(zip)) {
                alert("邮编不规范");
                $(this).focus();
                return false;
            }
        }
    }
    return true;

});


//传真
$(".fax:enabled:visible").live("change", function () {
    var fax = $(this).val();
    if (fax != null || fax != "") {
        var reg = /(^[0-9]{3,4}\-[0-9]{7,8}\-[0-9]{3,4}$)|(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}\-[0-9]{3,4}$)|(^[0-9]{7,15}$)/;
        if (!reg.test(fax)) {
            alert("传真格式不正确");
            $(this).focus();
            return false;
        }
    }

});

//电话
$(".tel:enabled:visible").live("change", function () {
    var tel = $(this).val();
    if (tel != null || tel != "") {
        var reg = /(^[0-9]{3,4}\-[0-9]{7,8}\-[0-9]{3,4}$)|(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}\-[0-9]{3,4}$)|(^[0-9]{7,15}$)/;
        if (!reg.test(tel)) {
            alert("电话格式不正确");
            $(this).focus();
            return false;
        }
    }

});


//######################################验证数字#########################################################################
//使用本脚本需要先引入jquery1.4以上版本
//使用本脚本,不要放在head中,最佳位置是</body>前面
//使用方法:引入本脚本,然后在需要验证的控件上加isnum的样式,如:<input type="text" class="isnum" id="你自己的控件ID" />
//处理多余小数点
function checkXishudian(v) {
    var result = v;
    var arr = v.split(".");
    if (arr.length > 2)//说明出现两次以上小数点
    {
        var firstv = arr[0];
        var afterv = v.substring(firstv.length + 1);
        afterv = afterv.replace(".", "");
        result = firstv + "." + afterv;
    }
    return result;

}

/*
参数说明:
ckValue:要被检测的值
isAllowLtZero:是否允许小于0
isInt:是否必须为整数
digits:小数精度
*/
function checkDataAndReturn(ckValue, isAllowLtZero, isInt, digits) {
    if ($.trim(ckValue) == "") return;
    var o = ckeckMinus(ckValue); //去掉非数字
    o = checkXishudian(o); //处理多余小数点
    if (!isAllowLtZero) {
        if (o < 0)
            o = accSub(0, o);
    }
    if (isInt) digits = 0;
    if (digits < 0) digits = 0;
    var result = o.toString();
    if (result == "") return 0;
    var arr = result.split(".");
    if (digits == 0) {
        result = arr[0];
    }
    else {
        result = arr[0];
        if (arr.length > 1) {
            if (arr[1].length > digits)
                result += "." + arr[1].substring(0, digits);
            else
                result += "." + arr[1];
        }
    }

    return result;
}

//处理字符中的减号
function ckeckMinus(v) {
    if (v == "") return "";
    var firstv = 0;
    var afterv = "";
    if (v != "") {
        firstv = v.substring(0, 1);
        if (v.length > 1)
            afterv = v.substring(1);
    }
    if (firstv == "-") {
        if (afterv != "") {
            afterv = afterv.replace(/[^\d\.]/g, "");
            return firstv + afterv;
        }
        else
            return v;
    }
    else {
        return v.replace(/[^\d\.]/g, "");
    }
}

//必须填数字的控件事件
$(".isnum:enabled:visible").live("change", function () {
    var obj = $(this);
    if (obj.val() == "") return;
    var re = ckeckMinus(obj.val());
    var minnum = obj.attr("minnum");
    var maxnum = obj.attr("maxnum");
    if (minnum != undefined && !isNaN(minnum)) {
        if (accSub(re, minnum) < 0)
            re = minnum;
    }
    var maxnum = obj.attr("maxnum");
    if (maxnum != undefined && !isNaN(maxnum)) {
        if (accSub(re, maxnum) > 0) {
            re = maxnum;
        }
    }
    if (re == "") {
        if (obj.hasClass("need")) {
            obj.addClass("input_red");
        }
    }
    obj.val(re);


});
//处理是否有减号等
$(".isnum:enabled:visible").live("change", function () {
    var obj = $(this);
    if (obj.val() == "") return;
    var res = checkDataAndReturn(obj.val(), false, true, 2);
    if (res == "") {
        if (obj.hasClass("need")) {
            obj.addClass("input_red");
        }
    }
    obj.val(res);
});

//$(".isnum:enabled:visible").live("blur", function () {
//    var obj = $(this);
//    var re = "";
//    if (obj.attr("minnum") != undefined && !isNaN(obj.attr("minnum"))) {
//        re = obj.attr("minnum");
//    }

//    if (re == "") {
//        maxnum = obj.attr("maxnum");
//        if (maxnum != undefined && isNaN(maxnum)) {
//            re = maxnum;
//        }
//    }
//    if (re != "") {
//        obj.val(re);
//        if (obj.hasClass("input_red")) {
//            obj.removeClass("input_red");
//        }
//    }
//});

//$(".isnum:enabled:visible").live("focus", function () {
//    var obj = $(this);
//    if (obj.val() == "0") obj.val("");
//});

//必须填数字的控件事件
$(".isdb:enabled:visible").live("change", function () {
    var obj = $(this);
    if (obj.val() == "") return;
    var re = ckeckMinus(obj.val());
    var minnum = obj.attr("minnum");
    if (minnum != undefined && !isNaN(minnum)) {
        if (accSub(re, minnum) < 0)
            re = minnum;
    }
    var maxnum = obj.attr("maxnum");
    if (maxnum != undefined && !isNaN(maxnum)) {
        if (accSub(re, maxnum) > 0) {
            re = maxnum;
        }
    }
    if (re == "") {
        if (obj.hasClass("need")) {
            obj.addClass("input_red");
        }
    }
    obj.val(re);
});
//处理是否有减号等
$(".isdb:enabled:visible").live("change", function () {
    var obj = $(this);
    if (obj.val() == "") return;
    var res = checkDataAndReturn(obj.val(), false, false, 2);
    obj.val(res);
});

//$(".isdb:enabled:visible").live("blur", function () {
//    var obj = $(this);
//    if (obj.val() == "") {
//        return;
//    }
//    //if (obj.val() == "") obj.val(0);
//    if (obj.hasClass("input_red")) {
//        obj.removeClass("input_red");
//    }
//});

//$(".isdb:enabled:visible").live("focus", function () {
//    var obj = $(this);
//    if (obj.val() == "") {
//        return;
//    }
//    //if (obj.val() == "0") obj.val("");
//});

//比较时间,如果time2比time1大,则为true,否则为false
function ValidDate(time1, time2) {
    if (time1 == "" || time2 == "") return false;
    var arr1 = time1.split("-");
    var arr2 = time2.split("-");
    if (arr1.length != 3 || arr2.length != 3) return false;
    /*
    var date1 = Date.parse(time1);
    var date2 = Date.parse(time2);
    */
    var date1 = new Date(arr1[0], arr1[1], arr1[2]);
    var date2 = new Date(arr2[0], arr2[1], arr2[2]);
    return date2 > date1;
}

//替换某jq对象中的特殊符号
function filterSign(oldStr) {
        var reg = /@|\||"/g;
        var str = oldStr.replace(reg, "");
        var re = new RegExp("<", "gi");
        str = str.replace(re, "[");
        re = new RegExp(">", "gi");
        str = str.replace(re, "]");
        return str;
    }

1 查找对象所在库 2 根据备注查找对象 3 查找指定时间内修改过的对象 可内嵌入pb工具栏,可向pb发送消息打开指定对象 打开对象功能目前只支持70以上版本。 内嵌打开时可根据当前pb版本,查找最进一次打开的工程,并显示该工程的所有对象(支持70以上版本)。 图1 http://album.hi.csdn.net/app_uploads/liubocy/20081215/031936281.p.gif?d=20081215032033250 图2 http://album.hi.csdn.net/app_uploads/liubocy/20081215/031955062.p.gif?d=20081215032107375 图3 http://album.hi.csdn.net/app_uploads/liubocy/20081215/032010031.p.gif?d=20081215032125453 打开对象的功能是通过设置pb工具栏的Command Line语句,再向pb发送消息点击工具栏。 Command Line最多支持128个字节,所以尽量把pbl放在文件夹层级少的地方。 如果生成的语句大于128字节(没超出,发pbl+对象名的指令;如果超出,只发对象名的指令), 那么如果存在同名对象,就始终只能打开其中一个了。 pb6.X版本估计是不支持Command Line语句。有兴趣的朋友可以测试下 //打开app Application:///D|/PbObjFind/pbobjfind.pbl&action=open&entry=pbobjfind //打开dw DataWindow:///D|/PbObjFind/pbobjfind.pbl&action=open&entry=d_recentpbw //打开中文文件夹中pbl里的窗口 Window:///D|/Work/%b2%e2%ca%d4%bc%bc%ca%f5/%bc%b4%b4%f2%bc%b4%cd%a3/demo.pbl&action=open&entry=w_demo 图4 http://album.hi.csdn.net/app_uploads/liubocy/20081215/034733546.p.gif?d=20081215034744812
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值