//"use strict";
var isDebug = getUrlParameter("debug", "1", $('#jsBase').attr('src'));
if (isDebug == "1") {
isDebug = true;
}
else {
isDebug = false;
}
$(function () {
//initIEPlaceholder();
})
/**
* 检测是否移动设备来访 */
function browserRedirect() {
var sUserAgent = navigator.userAgent.toLowerCase();
var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";
var bIsMidp = sUserAgent.match(/midp/i) == "midp";
var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";
var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";
var bIsAndroid = sUserAgent.match(/android/i) == "android";
var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";
var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";
if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {
return true;
} else {
return false;
}
}
/**
* 获取IE版本 ,非IE 返回99*/
function IEBrowserVersion() {
var userAgent = navigator.userAgent;
//判断是否IE浏览器
var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1;
if (isIE) {
var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
reIE.test(userAgent);
var fIEVersion = parseFloat(RegExp["$1"]);
return fIEVersion;
} else {
if (!!window.ActiveXObject || "ActiveXObject" in window)
return 11;
else
return 99;
}
return 99;
}
/**
* 初始化IE情况下输入框中placeholder 变化*/
function initIEPlaceholder() {
if (IEBrowserVersion() < 10) {
if ($("input[type='text']").length > 0) {
$("input[type='text']").each(function () {
var input = $(this);
if (input.attr("placeholder") != undefined) {
if (input.val() == "") {
input.val(input.attr("placeholder"));
input.css("color", "#999");
}
input.bind("blur", function () {
if ($(this).val() == "") {
$(this).val($(this).attr("placeholder"));
$(this).css("color", "#999");
} else {
$(this).css("color", "");
}
});
input.bind("focus", function () {
if ($(this).val() == $(this).attr("placeholder")) {
$(this).val("");
$(this).css("color", "");
}
});
input.bind("keypress", function () {
$(this).css("color", "");
})
}
})
}
}
}
function htmlAppendToElement(html, element) {
if (IEBrowserVersion() < 99) {
element.append($(html));
} else {
element.append(html);
}
}
/**
* 提示文字信息,调用此方法必须引用 layer.js
* @param {String} icontype 提示图标,可选值:success、error、tips、loading、""
* @param {String} str 提示的文字信息
* @param {Int} daleytime 提示持续时间,单位秒
* @param {function} callBack 提示后执行的函数
*/
function tips(icontype, str, daleytime, callBack) {
// icon:(0:感叹号,1:OK,2:错误,3:问号,4:锁,5:哭脸,6:笑脸,16:加载中)
if (daleytime.length == 0 || isNaN(daleytime)) {
daleytime = 3;
}
var _time = parseInt(daleytime);
if (icontype == "error") {
layer.msg(str, { time: _time * 1000, offset: 'auto' }, function () { if (callBack != undefined) { callBack(); } });
} else if (icontype == "success") {
layer.msg(str, { time: _time * 1000, offset: 'auto' }, function () { if (callBack != undefined) { callBack(); } });
} else if (icontype == "tips") {
layer.msg(str, { time: _time * 1000, offset: 'auto' }, function () { if (callBack != undefined) { callBack(); } });
} else if (icontype == "loading") {
layer.load(2, { time: _time * 1000 });
} else {
layer.msg(str, { time: _time * 1000, offset: 'auto' }, function () { if (callBack != undefined) { callBack(); } });
}
//if (icontype == "error") {
// layer.msg(str, { icon: 2, time: _time * 1000});
//} else if (icontype == "success") {
// layer.msg(str, { icon: 1, time: _time * 1000});
//} else if (icontype == "tips") {
// layer.msg(str, { icon: 0, time: _time * 1000});
//} else if (icontype == "loading") {
// layer.msg(str, { icon: 16, time: _time * 1000});
//} else {
// layer.msg(str, { time: _time * 1000});
//}
//setTimeout(function () {
// d = false;
// if (callBack != undefined) {
// callBack();
// }
//}, _time * 1000);
}
/**提示 开发中 */
function coding() {
tips("tips", "功能开发中,敬请谅解..", 3);
}
/**
* 获取当前页面Url中的参数值
* @param {string} propty 属性名
* @param {any} defaultValue 默认值
* @param {string} url 可传入url,或者不传,不传时获取当前页
*/
function getUrlParameter(propty, defaultValue, url) {
if (url == null || url == undefined || url == "") {
url = window.location.href;
}
var loU = url.split("?");
if (loU.length > 1) {
var loallPm = loU[1].split("&");
for (var i = 0; i < loallPm.length; i++) {
var loPm = loallPm[i].split("=");
if (loPm[0] == propty) {
if (loPm.length > 1) {
return trim(loPm[1]);
} else {
return defaultValue;
}
}
}
} else if (propty.toLowerCase() == "id") {
var loU = url.split("/");
if (loU.length > 0) {
loU.reverse()
var lastUrl = loU[0];
lastUrl = replaceAll(lastUrl, ".html", "");
return lastUrl;
}
}
return defaultValue;
}
/**
* 判断指定值是否存在指定的一维数组中
* @param {any} str 需要判断的值
* @param {Array} array 一维数组
*/
function ExistStrInOneDimensionalArray(str, array) {
var exist = false;
for (var i = 0; i < array.length; i++) {
if (array[i] == str) {
exist = true;
break;
}
}
return exist;
}
/**
* 判断指定值是否存在指定的二维数组中
* @param {any} str1 需要判断的值1
* @param {any} str2 需要判断的值2
* @param {Array} array 二维数组
*/
function ExistStrInTwoDimensionalArray(str1, str2, array) {
var exist = false;
for (var i = 0; i < array.length; i++) {
if (array[i][0] == str1) {
if (array[i][1] == str2) {
exist = true;
break;
}
}
}
return exist;
}
/**
* 判断指定值是否存在指定的二维数组中
* @param {any} str1 需要判断的值1
* @param {any} str2 需要判断的值2
* @param {any} str3 需要判断的值3
* @param {Array} array 三维数组
*/
function ExistStrInThreeDimensionalArray(str1, str2, str3, array) {
var exist = false;
for (var i = 0; i < array.length; i++) {
if (array[i][0] == str1) {
if (array[i][1] == str2) {
if (array[i][2] == str3) {
exist = true;
break;
}
}
}
}
return exist;
}
/**
* 滚动到最顶部
* */
function goScrollTop() {
window.scrollBy(0, -200);
var sdelay = 0;
if (document.body.scrollTop > 0) {
sdelay = setTimeout('goTop()', 20);
}
}
/**
* 滚动到指定元素顶端
* @param {String} obj 如 #txtMobile 或 .strMobile
* @param {Int} moveHeight 便宜高度,可传入 负值
*/
function goScroll(obj, moveHeight) {
/// 滚动到指定id的元素的顶部
$("html,body").stop(true);
if (moveHeight == undefined) {
moveHeight = 0;
}
$("html,body").animate({ scrollTop: $(obj).offset().top + moveHeight }, 600);
}
/**
* 返回上一页
* */
function goback() {
window.history.go(-1);
}
/**
* 返回上一页并刷新
* */
function gobackRefresh() {
window.location = document.referrer;
}
/**
* 使用某字符串替换某字符串
* @param {String} content 需要替换的文字段
* @param {String} oldReplace 需要替换的文字
* @param {String} newReplace 要替换成的文字
*/
function replaceAll(content, oldReplace, newReplace) {
if (content == undefined) {
return "";
}
if (content.indexOf(oldReplace) > -1) {
content = content.replace(oldReplace, newReplace);
content = replaceAll(content, oldReplace, newReplace);
}
return content;
}
/**
* 替换指定模板中,该对象的值
* @param {any} obj
* @param {any} item
* @param {any} strTemplate
*/
function replaceHtmlTemplate(obj, item, strTemplate) {
for (var key in obj) {
strTemplate = replaceAll(strTemplate, "{{" + item + key + "}}", obj[key]);
}
return strTemplate;
}
/**
* 将指定字符串 去除头尾空格
* @param {String} content 指定的字符串
*/
function trim(content) {
return content.replace(/^\s+|\s+$/gm, '');
}
/**
* 移除指定的末尾字符串
* @param {any} content
* @param {any} str
*/
function trimEndString(content, str) {
var index = content.lastIndexOf(str);
if (index > -1) {
content = content.substring(0, index);
}
return content;
}
/**
* 切换图形验证码,指定对象的children
* @param {any} obj 指定的对象 一般this
* @param {any} codeurl 验证码请求地址
*/
function toggleCode(obj, codeurl) {
$(obj).children("img").eq(0).attr("src", codeurl + "?time=" + Math.random());
return false;
}
/**
* 切换验证码,指定对象的 prev
* @param {any} obj 指定的对象 一般this
* @param {any} codeurl 验证码请求地址
*/
function togglePrevCode(obj, codeurl) {
$(obj).prev().attr("src", codeurl + "?time=" + Math.random());
return false;
}
/**
* 切换验证码,指定对象的 next
* @param {any} obj 指定的对象 一般this
* @param {any} codeurl 验证码请求地址
*/
function toggleNextCode(obj, codeurl) {
$(obj).next().attr("src", codeurl + "?time=" + Math.random());
return false;
}
/**
* 切换验证码,指定对象
* @param {any} obj 指定的对象 一般this
* @param {any} codeurl 验证码请求地址
*/
function toggleThisCode(obj, codeurl) {
$(obj).attr("src", codeurl + "?time=" + Math.random());
return false;
}
/**
* 切换指定对象的某class
* @param {any} obj 指定的对象 一般this
* @param {any} selClass 切换的class
*/
function toggleClass(obj, selClass) {
$(obj).toggleClass(selClass);
}
/**
* 切换密码显示框类型
* @param {any} obj 指定的对象 一般this
* @param {any} selClass
*/
function changePaswordType(obj, selClass) {
$(obj).toggleClass(selClass);
if ($(obj).prev().attr("type") == "password") {
$(obj).prev().attr("type", "text")
} else {
$(obj).prev().attr("type", "password")
}
}
/**
* 用于验证表单元素中的值,含有未通过则返回 false,并提示
* @param {any} idOrClass 一般使用 class
*/
function checkValidata(idOrClass) {
var flag = true;
for (var i = 0; i < $(idOrClass).length; i++) {
flag = tipsValidate($(idOrClass).eq(i));
if (!flag) {
break;
}
}
return flag;
}
/**
* 用于验证指定表单元素的值,未通过则返回 false,并提示
* @param {String} idOrClass 可使用id 或 class 如 #txtMobile 或 .strMobile
*/
function tipsValidate(idOrClass) {
var obj = $(idOrClass);
var value = obj.val();
if (value == undefined) {
tips("tips", "请检查参数", 3);
return false;
}
if (obj.attr("placeholder") != undefined && obj.attr("placeholder") == value) {
value = "";
}
if (obj.attr("nullmsg") != undefined) {
if (trim(value).length <= 0) {
tips("tips", obj.attr("nullmsg"), 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
}
}
if (obj.attr("data-min") != undefined) {
var minValue = parseInt(obj.attr("data-min"));
value = parseInt(value);
if (isNaN(value)) {
value = 0;
}
if (value < minValue) {
if (obj.attr("errormsg") != undefined) {
tips("tips", obj.attr("errormsg"), 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
} else {
tips("tips", "输入值不得小于" + minValue, 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
}
}
}
if (obj.attr("data-max") != undefined) {
var maxValue = parseInt(obj.attr("data-max"));
value = parseInt(value);
if (isNaN(value)) {
value = 0;
}
if (value > maxValue) {
if (obj.attr("errormsg") != undefined) {
tips("tips", obj.attr("errormsg"), 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
}
else {
tips("tips", "输入值不得大于" + maxValue, 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
}
}
}
if (obj.attr("data-minlength") != undefined) {
var minlen = parseInt(obj.attr("data-minlength"));
if (value.length < minlen) {
if (obj.attr("errormsg") != undefined) {
tips("tips", obj.attr("errormsg"), 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
} else {
tips("tips", "输入内容不得少于" + minlen + "位长度", 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
}
}
}
if (obj.attr("data-maxlength") != undefined) {
var maxlen = parseInt(obj.attr("data-maxlength"));
if (value.length > maxlen) {
if (obj.attr("errormsg") != undefined) {
tips("tips", obj.attr("errormsg"), 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
} else {
tips("tips", "输入内容不得超过" + maxlen + "位长度", 3);
obj.focus();
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
return false;
}
}
}
if (obj.attr("datatype") != undefined) {
var type = obj.attr("datatype");
var flag = true;
switch (type) {
case "m":
if (!checkMobile(value)) {
flag = false;
}
break;
case "idcard":
if (!new IdCardUtils(value).VerifyIDCard()) {
flag = false;
}
break;
case "num":
if (isNaN(value)) {
return false;
}
break;
default:
}
if (!flag) {
if (obj.attr("errormsg") != undefined) {
tips("tips", obj.attr("errormsg"), 3);
var t = obj.attr("type");
if (t.toLowerCase() === "hidden") {
goScroll(obj.parent())
}
}
obj.focus();
return false;
}
}
return true;
}
/**
* 显示指定内容,指定宽高的提示窗
* @param {String} objId 指定内容容器的ID
* @param {any} width 窗体宽度 px
* @param {any} height 窗体高度 px
*/
function showWindow(objId, width, height) {
var box = '
' + $('#' + objId).html() + '
';
var tit = $('#' + objId).attr("title");
//var dialog = $.dialog({
// lock: true,
// min: false,
// max: false,
// resize: false,
// title: tit,
// content: box,
// width: width,
// height: height,
// ok: function () {
// },
// cancel: false
//});
//页面层
layer.open({
title: tit,
type: 1,
skin: 'layui-layer-rim', //加上边框
area: [width, height], //宽高
content: box
});
}
/**
* 验证手机号码
* @param {String} mobile 需要验证的文字
*/
function checkMobile(mobile) {
/// 验证手机号码
var ismobi = /^1[3|4|5|6|7|8|9][0-9]\d{4,8}$/.test(mobile);
if (ismobi && !isNaN(mobile) && mobile.length == 11) {
return true;
}
return false;
}
/**
* 验证是否正整数
* @param {String} num 需要验证的文字
*/
function checkInt(num) {
var reg = new RegExp("^[0-9]*$");
if (!reg.test(num)) {
return false;
} else {
return true;
}
}
/**
* 验证是否浮点型 一位或两位正小数
* @param {String} num 需要验证的文字
*/
function checkFloat(num) {
var reg = new RegExp("^[1-9][0-9]+(.[0-9]{1,2})?$");
if (!reg.test(num)) {
return false;
} else {
return true;
}
}
/**
* 验证是否邮箱
* @param {String} email 需要验证的文字
*/
function checkEmail(email) {
var reg = new RegExp("^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$");
if (!reg.test(email)) {
return false;
} else {
return true;
}
}
/**
* 只允许输入 数字 ,适用onkeyup中
* @param {any} e
*/
function checkNumber(e) {
if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0) { //FF
if (!((e.which >= 48 && e.which <= 57) || (e.which >= 96 && e.which <= 105) || (e.which == 8) || (e.which == 46)))
return false;
} else {
if (!((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105) || (event.keyCode == 8) || (event.keyCode == 46)))
event.returnValue = false;
}
}
/**
* 只允许输入数字,只允许输入2位小数 ,适用onkeyup中
* @param {any} obj 只传this
*/
function clearNoNum(obj) {
var val = obj.value + '';
if (event.keyCode == 39 || event.keyCode == 37 || event.keyCode == 40 || event.keyCode == 16) {
return false;
}
val = val.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
val = val.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
val = val.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
val = val.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');//只能输入两个小数
if (val.indexOf(".") < 0 && val != "") {//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
val = parseFloat(val);
}
val = val + '';
var v = val.split('.')[0];
if (v.length > 9) {
v = v.substring(0, 9);
if (val.indexOf('.') > -1) {
v = v + '.' + val.split('.')[1];
}
val = v;
}
if (obj.value != val) {
obj.value = val;
}
}
/**
* 清除指定字符串中的非数字,只保留2位小数
* @param {String} val 指定的字符串
*/
function clearNoNumber(val) {
val = val + "";
val = val.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
val = val.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
val = val.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
val = val.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');//只能输入两个小数
if (val.indexOf(".") < 0 && val != "") {//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
val = parseFloat(val);
}
val = val + '';
var v = val.split('.')[0];
if (v.length > 9) {
v = v.substring(0, 9);
if (val.indexOf('.') > -1) {
v = v + '.' + val.split('.')[1];
}
val = v;
}
return val;
}
/**
* 只允许输入数字,只允许输入3位小数 ,适用onkeyup中
* @param {any} obj 只传this
*/
function clearNoNum3(obj) {
var val = obj.value + '';
if (event.keyCode == 39 || event.keyCode == 37 || event.keyCode == 40 || event.keyCode == 16) {
return false;
}
val = val.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
val = val.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
val = val.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
val = val.replace(/^(\-)*(\d+)\.(\d\d\d).*$/, '$1$2.$3');//只能输入三个小数
if (val.indexOf(".") < 0 && val != "") {//以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
val = parseFloat(val);
}
val = val + '';
var v = val.split('.')[0];
if (v.length > 9) {
v = v.substring(0, 9);
if (val.indexOf('.') > -1) {
v = v + '.' + val.split('.')[1];
}
val = v;
}
if (obj.value != val) {
obj.value = val;
}
}
/**
* 只允许输入整数数字,不可输入小数 ,适用onkeyup中
* @param {any} obj 只传this
*/
function clearNoInt(obj) {
var val = obj.value + '';
if (event.keyCode == 39 || event.keyCode == 37 || event.keyCode == 40 || event.keyCode == 16) {
return false;
}
val = val.replace(/[^\d]/g, ""); //清除“数字”和“.”以外的字符
while (val.length > 1 && val.indexOf("0") == 0) {
val = val.substring(1, val.length);
}
if (val.length > 9) {
val = val.substring(0, 9);
}
val = val + '';
if (obj.value != val) {
obj.value = val;
}
}
/**
* 表单AJAX提交封装(包含验证)
* @param {String} apiName 接口地址
* @param {String} formId 表单的Id值
* @param {String} btnId 提交按钮的Id值
* @param {String} urlId 隐藏的要跳转的链接地址的 Id值
* @param {String} imgId 图形验证码的Id值,不存在传空串
* @param {Function} beforeCallBack 提交之前的处理函数,必须返回boolen,true则继续提交,false 则不进行提交
* @param {Function} successCallBack 成功时的回调
* @param {Function} errorCallback 处理异常时的回调
*/
function AjaxInitForm(apiName, formId, btnId, urlId, imgId, beforeCallBack, successCallBack, failCallBack, errorCallBack) {
var formObj = $('#' + formId);
var btnObj = $("#" + btnId);
var urlObj = $("#" + urlId);
var imgObj = $("#" + imgId);
btnObj.click(function () {
if (btnObj.prop("disabled")) {
return false;
}
var requestData = {};
var obj = $(formObj).serializeArray();
$.each(obj, function (i, v) {
//requestData[v.name] = v.value;
appendToJson(requestData, v.name, v.value, ",");
})
if (beforeCallBack != undefined) {
if (beforeCallBack(requestData) == false) {
return false;
}
}
btnObj.prop("disabled", true);
btnObj.val("提交中...");
var request = new ClientBase();
request.SendApiData(apiName, requestData,
function (response) {
formResponse(response, requestData);
},
function (response,msg) {
btnObj.prop("disabled", false);
btnObj.val("再次提交");
if (imgObj != undefined) {
imgObj.click();
}
if (failCallBack != undefined) {
failCallBack(response);
return;
}
tips("tips", msg, 3);
},
formError, true);
return false;
})
//表单提交后
function formResponse(data, requestData) {
btnObj.val("提交成功");
if (successCallBack != undefined) {
successCallBack(data, requestData);
return;
} else {
tips("success", data.msg, 3, function () {
if (data.url != undefined && data.url != "") {
window.location.href = data.url;
}
else if (urlObj.length > 0 && urlObj.val() != "") {
if (urlObj.val() == "referrer") {
window.location.href = document.referrer;
}
else {
window.location.href = urlObj.val();
}
} else {
window.location.reload();
}
});
}
}
//表单提交出错
function formError(res) {
btnObj.prop("disabled", false);
btnObj.val("再次提交");
if (imgObj != undefined) {
imgObj.click();
}
if (res.responseJSON != undefined) {
return;
}
if (errorCallBack != undefined) {
errorCallBack(res);
} else {
if (isDebug) {
tips("error", res.msg, 5);
}
}
}
}
/**
* 异步获取局部页面
* @param {String} url 请求地址
* @param {String} divIdOrClass 需要拼接的容器的 Id值或 Class
* @param {bool} isRef 是否清空原数据
* @param {Function} callBack 成功时额外处理的回调,可为undefined
* @param {Function} nullcallBack 当获取的内容为空时触发的回调函数
*/
function AjaxGetHtml(url, divIdOrClass, isRef, callBack, nullcallBack) {
$.ajax({
type: "get",
url: url,
dataType: "html",
success: function (data) {
if (isRef) {
$(divIdOrClass).html(data);
} else {
$(divIdOrClass).append(data);
}
if (callBack != undefined) {
callBack();
}
if (trim(data) == "") {
if (nullcallBack != undefined) {
nullcallBack();
}
}
}
})
}
/*按钮锁定*/
function lockBtn(v, str, cls) {
/// 锁定按钮 只支持button
/// 按钮
/// 锁定后按钮文本
if ($.trim(cls).length <= 0) {
cls = 'sel';
}
$(v).attr('disabled', true);
$(v).addClass(cls);
if ($.trim(str).length <= 0) {
$(v).val('验证中...');
} else {
$(v).val(str);
}
}
function unLockBtn(v, str, cls) {
/// 解锁按钮 只支持button
/// 按钮
/// 锁定后按钮文本
if ($.trim(cls).length <= 0) {
cls = 'sel';
}
$(v).removeAttr('disabled');
$(v).removeClass(cls);
if ($.trim(str).length <= 0) {
str = "下一步";
}
$(v).val(str);
}
function lockTimeBtn(v, wait, str, cls) {
//锁定按钮一定时间
if ($.trim(str).length <= 0) {
str = "获取";
}
//锁定按钮
lockBtn(v, wait + "秒后重新发送", cls);
sendTime(wait, v, str, cls);
}
function sendTime(wait, v, str, cls) {
//开始倒计时
if (wait == 0) {
unLockBtn(v, str, cls);//解锁按钮
} else {
setTimeout(function () {
wait--;
$(v).val(wait + "秒后重新发送");
sendTime(wait, v, str, cls);
}, 1000);
}
}
/*日期函数*/
function DateTimeInit(_date) {
_date = _date.replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '').replace(/(-)/g, '/')
if (_date.indexOf(".") > 0) _date = _date.slice(0, _date.indexOf("."))
var date = new Date(_date);
return date;
}
function formatTime(_date, _init) {
var year = formatNumber(_date.getFullYear());
var month = formatNumber(_date.getMonth() + 1);
var day = formatNumber(_date.getDate());
var hour = formatNumber(_date.getHours());
var minute = formatNumber(_date.getMinutes());
var second = formatNumber(_date.getSeconds());
var result = _init.replace('yyyy', year).replace('MM', month).replace('dd', day).replace('HH', hour).replace('mm', minute).replace('ss', second);
return result;
}
function formatNumber(n) {
n = n.toString()
return n[1] ? n : '0' + n
}
function format(now, mask) {
var d = now;
var zeroize = function (value, length) {
if (!length) length = 2;
value = String(value);
for (var i = 0, zeros = ''; i < (length - value.length); i++) {
zeros += '0';
}
return zeros + value;
};
return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function ($0) {
switch ($0) {
case 'd': return d.getDate();
case 'dd': return zeroize(d.getDate());
case 'ddd': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
case 'dddd': return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
case 'M': return d.getMonth() + 1;
case 'MM': return zeroize(d.getMonth() + 1);
case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
case 'MMMM': return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
case 'yy': return String(d.getFullYear()).substr(2);
case 'yyyy': return d.getFullYear();
case 'h': return d.getHours() % 12 || 12;
case 'hh': return zeroize(d.getHours() % 12 || 12);
case 'H': return d.getHours();
case 'HH': return zeroize(d.getHours());
case 'm': return d.getMinutes();
case 'mm': return zeroize(d.getMinutes());
case 's': return d.getSeconds();
case 'ss': return zeroize(d.getSeconds());
case 'l': return zeroize(d.getMilliseconds(), 3);
case 'L': var m = d.getMilliseconds();
if (m > 99) m = Math.round(m / 10);
return zeroize(m);
case 'tt': return d.getHours() < 12 ? 'am' : 'pm';
case 'TT': return d.getHours() < 12 ? 'AM' : 'PM';
case 'Z': return d.toUTCString().match(/[A-Z]+$/);
// Return quoted strings with the surrounding quotes removed
default: return $0.substr(1, $0.length - 2);
}
});
};
/**获取时间戳 */
function getTimeStamp() {
var timestamp = new Date().getTime();
return timestamp;
}
/**
* 数组类型数据的扩展,判断存在位置
* @param {any} val 指定的数据
*/
Array.prototype.indexOf = function (val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
};
/**
* 数组类型数据的扩展,移除指定元素
* @param {any} val 指定的数据
*/
Array.prototype.remove = function (val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
/**
* 向指定对象中 添加或修改字段,值为undefined则删除该字段
* @param {Object} data 指定的对象
* @param {any} prop 字段名
* @param {any} val 值,可为undefined
*/
function addToJson(data, prop, val) {
// 如果 val 被忽略
if (typeof val === "undefined") {
// 删除属性
delete data[prop];
}
else {
// 添加 或 修改
data[prop] = val;
}
}
/**
* 向指定对象中 添加值,仅在不存在时添加,存在时不会修改原值,值为undefined则删除该字段
* @param {Object} data 指定的对象
* @param {any} prop 字段名
* @param {any} val 值,可为undefined
* @param {any} operater 分割符
*/
function appendToJson(data, prop, val, operater) {
// 如果 val 被忽略
if (typeof val === "undefined") {
// 删除属性
delete data[prop];
}
else {
if (data[prop] != undefined) {
data[prop] = data[prop] + operater + val;
} else {
data[prop] = val;
}
}
}
/**
* 给对象 设置属性值
* @param {any} obj
* @param {any} propty
* @param {any} reusltObj
*/
function setObjectValue(obj, propty, reusltObj) {
if (obj[propty] != undefined) {
addToJson(reusltObj, propty, obj[propty]);
}
return reusltObj;
}
/**
* 从对象中 获取值,可设置默认值
* @param {any} propty
* @param {any} obj
* @param {any} defaultValue
*/
function getObjectValue(propty, obj, defaultValue) {
if (obj == undefined) {
if (defaultValue == undefined) {
return "";
}
return defaultValue;
} else {
if (obj.propty == undefined) {
if (defaultValue == undefined) {
return "";
}
return defaultValue;
} else {
return obj[propty];
}
}
}
/**
* 获取 指定元素对象的值
* @param {any} obj 可以为ID,或class ,如 #txtMobile 或 .strMobile
*/
function getDomValue(obj) {
if (IEBrowserVersion() < 10) {
if ($(obj).attr("placeholder") != undefined) {
if ($(obj).val() == $(obj).attr("placeholder")) {
return "";
}
}
}
return trim($(obj).val());
}
/**
* 等比例缩放图片大小
* @param {any} ImgD 图形的dom对象
* @param {any} iwidth 要缩放的宽
* @param {any} iheight 要缩放的高
*/
function DrawImage(ImgD, iwidth, iheight) {
//参数(图片,允许的宽度,允许的高度)
var image = new Image();
image.src = ImgD.src;
if (image.width > 0 && image.height > 0) {
if (image.width / image.height >= iwidth / iheight) {
if (image.width > iwidth) {
ImgD.width = iwidth;
ImgD.height = (image.height * iwidth) / image.width;
} else {
ImgD.width = image.width;
ImgD.height = image.height;
}
} else {
if (image.height > iheight) {
ImgD.height = iheight;
ImgD.width = (image.width * iheight) / image.height;
} else {
ImgD.width = image.width;
ImgD.height = image.height;
}
}
}
}
/**
* @param {string} img 图片的base64
* @param {int} dir exif获取的方向信息
* @param {function} next 回调方法,返回校正方向后的base64
*/
function getImgData(img, dir, next) {
var image = new Image();
image.onload = function () {
var degree = 0, drawWidth, drawHeight, width, height;
drawWidth = this.naturalWidth;
drawHeight = this.naturalHeight;
//以下改变一下图片大小
var maxSide = Math.max(drawWidth, drawHeight);
if (maxSide > 3000) {
var minSide = Math.min(drawWidth, drawHeight);
minSide = minSide / maxSide * 3000;
maxSide = 3000;
if (drawWidth > drawHeight) {
drawWidth = maxSide;
drawHeight = minSide;
} else {
drawWidth = minSide;
drawHeight = maxSide;
}
}
var canvas = document.createElement('canvas');
canvas.width = width = drawWidth;
canvas.height = height = drawHeight;
var context = canvas.getContext('2d');
//判断图片方向,重置canvas大小,确定旋转角度,iphone默认的是home键在右方的横屏拍摄方式
switch (dir) {
//iphone横屏拍摄,此时home键在左侧
case 3:
degree = 180;
drawWidth = -width;
drawHeight = -height;
break;
//iphone竖屏拍摄,此时home键在下方(正常拿手机的方向)
case 6:
canvas.width = height;
canvas.height = width;
degree = 90;
drawWidth = width;
drawHeight = -height;
break;
//iphone竖屏拍摄,此时home键在上方
case 8:
canvas.width = height;
canvas.height = width;
degree = 270;
drawWidth = -width;
drawHeight = height;
break;
}
//使用canvas旋转校正
context.rotate(degree * Math.PI / 180);
context.drawImage(this, 0, 0, drawWidth, drawHeight);
//返回校正图片
next(canvas.toDataURL(img.split(';')[0].replace('data:', ''), 0.95));
}
image.src = img;
}
/**
* 将以base64的图片url数据转换为Blob
* @param {any} urlData 用url方式表示的base64图片数据
*/
function convertBase64UrlToBlob(urlData) {
var arr = urlData.split(',');
var bytes = window.atob(arr[1]); //去掉url的头,并转换为byte
var mime = arr[0].match(/:(.*?);/)[1];// 结果: image/png
//处理异常,将ascii码小于0的转换为大于0
var u8arr = new ArrayBuffer(bytes.length);
var ia = new Uint8Array(u8arr);
for (var i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob([u8arr], { type: mime });
}
/**
* !!!IE不支持 将以base64的图片url数据转换为File
* @param {any} urlData 用url方式表示的base64图片数据
* @param {any} filename 文件名
*/
function convertBase64UrlToFile(urlData, filename) {
var arr = urlData.split(',');
var bytes = window.atob(arr[1]); //去掉url的头,并转换为byte
var mime = arr[0].match(/:(.*?);/)[1];// 结果: image/png
//处理异常,将ascii码小于0的转换为大于0
var u8arr = new ArrayBuffer(bytes.length);
var ia = new Uint8Array(u8arr);
for (var i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new File([u8arr], filename, { type: mime });
}
/**
* 输出日志
* @param {any} str
*/
function debugLog(str) {
if (isDebug) {
if ((typeof str) == "object") {
console.log(str);
} else {
console.log(JSON.stringify(str));
}
}
}
/*
================ 延时加载图片 ==============
*/
/**
* 延时加载图片,例如 fun_loadImgSrc('#id'); 或者 fun_loadImgSrc('body');
* @param {any} divobj
*/
function fun_loadImgSrc(divobj) {
var domain = document.location.host;
$(divobj).find('img').each(function () {
var imgobj = $(this);
var src = imgobj.attr('src');
if (!!src && src.indexOf('css') > -1) {
var _src = imgobj.attr('_src');
if (_src != undefined && _src.length > 0 && _src.substring(_src.length - 1, 1) != '/') {
if (_src.indexOf('http') == -1) {
_src = 'http://' + domain + _src;
}
if (_src.indexOf('.jpg') > -1 || _src.indexOf('.png') > -1 || _src.indexOf('.gif') > -1 || _src.indexOf('.jpeg') > -1 || _src.indexOf('.bmp') > -1 || _src.indexOf('http') > -1) {
var img = new Image();
$(img).attr('src', _src);
img.onload = function () {
imgobj.attr('src', _src);
};
}
}
}
});
}
/*字典 Dictionary类*/
var Dictionary = function () {
this.add = add;
this.datastore = new Array();
this.find = find;
this.remove = remove;
this.showAll = showAll;
this.count = count;
this.clear = clear;
this.toKVString = toKVString;
function add(key, value) {
this.datastore[key] = value;
}
function find(key) {
return this.datastore[key];
}
function remove(key) {
delete this.datastore[key];
}
function showAll() {
var str = "";
for (var key in this.datastore) {
str += key + " -> " + this.datastore[key] + "; "
}
console.log(str);
}
function count() {
var n = 0;
for (var key in Object.keys(this.datastore)) {
++n;
}
console.log(n);
return n;
}
function clear() {
for (var key in this.datastore) {
delete this.datastore[key];
}
}
function toKVString(isPrintOutEmpty, oparete) {
var content = "";
for (var key in this.datastore) {
if (key == "remove" || key == "indexOf") {
continue;
}
var value = this.datastore[key];
if (!isPrintOutEmpty) {
if (value == undefined || value == "") {
continue;
}
}
content += (key + "=" + value + oparete);
}
content = trimEndString(content, oparete);
return content;
}
}
var StorageHelper = function () {
this.setLocalStorage = function (key, value, expireMinute) {
if (this.checkStorageSurpport("local")) {
if (!(!!expireMinute)) {
expireMinute = 2000;
}
var expireTime = new Date().getTime() + 1000 * 60 * expireMinute;//获取当前时间
var json = JSON.stringify({ val: value, time: expireTime });
localStorage.setItem(key, json);
}
}
this.getLocalStorage = function (key) {
if (this.checkStorageSurpport("local")) {
var value = localStorage.getItem(key);//获取存储的元素
if (value == undefined) {
//debugLog(key + "已过期");
return undefined;
}
var dataobj = JSON.parse(value);//解析出json对象
if (new Date().getTime() > dataobj.time) {
//debugLog(key + "已过期");
this.removeLocalStorage(key);
return undefined;
} else {
return dataobj.val;
}
}
}
this.removeLocalStorage = function (key) {
if (this.checkStorageSurpport("local")) {
localStorage.removeItem(key);
}
return true;
}
this.clearLocalStorage = function () {
if (this.checkStorageSurpport("local")) {
localStorage.clear();
}
return true;
}
this.setSessionStorage = function (key, value, expireMinute) {
this.setLocalStorage(key, value, expireMinute);
//if (this.checkStorageSurpport("session")) {
// if (!(!!expireMinute)) {
// expireMinute = 2000;
// }
// var expireTime = new Date().getTime() + 1000 * 60 * expireMinute;//获取当前时间
// var json = JSON.stringify({ val: value, time: expireTime });
// sessionStorage.setItem(key, json);
//}
}
this.getSessionSotrage = function (key) {
return this.getLocalStorage(key);
//if (this.checkStorageSurpport("session")) {
// var value = sessionStorage.getItem(key);//获取存储的元素
// if (value == undefined) {
// //debugLog(key + "已过期");
// return undefined;
// }
// var dataobj = JSON.parse(value);//解析出json对象
// if (new Date().getTime() > dataobj.time) {
// //debugLog(key + "已过期");
// this.removeSessionSotrage(key);
// return undefined;
// } else {
// return dataobj.val;
// }
//}
}
this.removeSessionSotrage = function (key) {
this.removeLocalStorage(key);
//if (this.checkStorageSurpport("session")) {
// sessionStorage.removeItem(key);
//}
return true;
}
this.clearSessionStorage = function () {
if (this.checkStorageSurpport("session")) {
sessionStorage.clear();
}
return true;
}
this.checkStorageSurpport = function (val) {
if (val == "local") {
if (window.localStorage) {
return true;
} else {
//window.location.href = "/Error/BrowserUpdgram";
return false;
}
} else if (val == "session") {
if (window.sessionStorage) {
return true;
} else {
//window.location.href = "/Error/BrowserUpdgram";
return false;
}
}
else {
//window.location.href = "/Error/BrowserUpdgram";
return false;
}
}
}
function changePageNumber(page) {
}
var PagerHelper = function (ptotalCount, ptotalNumber, pindex, psize, callback, pshowTotalCount, pshowPrevAndNext) {
var TotalCount = parseInt(ptotalCount);
var TotalPages = parseInt(ptotalNumber);
var PageSize = parseInt(psize);
var PageIndex = parseInt(pindex);
var CenterSize = 6;
var showTotalCount = pshowTotalCount || false;
var showPrevAndNext = pshowPrevAndNext || true;
changePageNumber = function (page) {
callback(page);
}
this.getMiddleStart = function () {
return parseInt(Math.floor(TotalPages * 1.0 / 2.0));
}
this.GetStartPageNumber = function () {
var firstNum = PageIndex - (CenterSize / 2); //中间开始的页码
if (PageIndex < CenterSize)
firstNum = 2;
return firstNum;
}
this.GetEndPageNumber = function () {
var lastNum = PageIndex + CenterSize - ((CenterSize / 2) + 1); //中间结束的页码
if (lastNum >= TotalPages)
lastNum = TotalPages - 1;
return lastNum;
}
this.CreatPageBar = function () {
var html = "";
if (TotalCount <= 0) {
return html;
}
if (TotalCount <= PageSize) {
return html;
}
var index = 1;
html += "
";
if (showTotalCount) {
html += "共找到" + TotalCount + "条";
}
if (showPrevAndNext && PageIndex > 1) {
html += "上一页";
}
if (TotalPages <= 11) {
for (var i = 1; i <= TotalPages; i++) {
index++;
if (i == PageIndex) {
html += "" + i + "";
} else {
html += "" + i + "";
}
}
}
if (TotalPages > 11) {
//头
for (var i = 1; i <= 1; i++) {
index++;
if (i == PageIndex) {
html += "" + i + "";
} else {
html += "" + i + "";
}
}
//中间部分
var startPageNumber = this.GetStartPageNumber();
var endPageNumber = this.GetEndPageNumber();
if (PageIndex >= CenterSize) {
html += "...";
}
for (var i = startPageNumber; i <= endPageNumber; i++) {
if (PageIndex == i)
html += "" + i + " ";
else
html += "" + i + "";
}
if (TotalPages - PageIndex > CenterSize - ((CenterSize / 2))) {
html += "...";
}
//尾部
for (var i = TotalPages; i <= TotalPages; i++) {
index++;
if (i == PageIndex) {
html += "" + i + "";
} else {
html += "" + i + "";
}
}
}
if (showPrevAndNext && PageIndex < TotalPages) {
html += "下一页";
}
html += "