您的位置:首页 > Web前端 > JavaScript

经常用到的一些js方法

2012-10-26 15:48 417 查看
//#######################计算类##############################################################
//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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: