easyui扩展JS

根据业务进行的扩展,easyui版本1.4.2


var sy = sy || {};

/**
 * 扩展validatebox,修改默认值
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.validatebox.defaults, {
	inputEvents:{
		focus:function(e){
			var t=$(e.data.target);
			window.setTimeout(function(){t.textbox('textbox').select();},100);
		},click:function(e){
			var t=$(e.data.target);
			if(!t.is(":focus")){
				t.trigger("focus");
			}
		}
	}
});
/**
 * 扩展textbox,修改默认值
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.textbox.defaults, {
	width:173,
	onChange:function(p){
		if(p!=undefined&&typeof p == 'string'){
			p = p.replace(",",",")+'';//将中文逗号替换成英文逗号
			if ($(this).textbox('options').prompt.indexOf('*')<0) {//替换特殊字符,根据提示中是否包含*决定是否替换*
				$(this).textbox("setValue",p.replace(/[<>!=\|\+\^\s\/\\\'\"\?\[\]\(\)\*]/g,''));
			}else{
				$(this).textbox("setValue",p.replace(/[<>!=\|\+\^\s\/\\\'\"\?\[\]\(\)]/g,''));
			}
		}
	}
});
/**
 * 更改easyui加载grid时的提示文字
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.datagrid.defaults, {
	loadMsg : '数据加载中....',
	title: '',
	striped: true, //显示斑马线效果
	rownumbers: true, //如果为true,则显示一个行号列。
	fit: true, //自适应宽度	
	autoRowHeight: false, //自适应高度
	rownumbers: true, //如果为true,则显示一个行号列。
	pagination: true, //分页
	pageSize: 50,
	pageList: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500],
    onBeforeLoad: function(param) {
        loadProgress($,true);
    },
	onLoadSuccess : function(data) {
		$(this).datagrid('clearChecked');
		$('.iconImg').attr('src', sy.pixel_0);
        loadProgress($,false);
	}
});

/**
 * panel关闭时回收内存,主要用于layout使用iframe嵌入网页时的内存泄漏问题
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 * 
 */
$.extend($.fn.panel.defaults, {
	loadingMessage : '加载中....',
	onBeforeDestroy : function() {
		var frame = $('iframe', this);
		try {
			if (frame.length > 0) {
				for (var i = 0; i < frame.length; i++) {
					frame[i].src = '';
					frame[i].contentWindow.document.write('');
					frame[i].contentWindow.close();
				}
				frame.remove();
				if (navigator.userAgent.indexOf("MSIE") > 0) {// IE特有回收内存方法
					try {
						CollectGarbage();
					} catch (e) {
					}
				}
			}
		} catch (e) {
		}
	}
});

/**
 * 防止panel/window/dialog组件超出浏览器边界
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
sy.onMove = {
	onMove : function(left, top) {
		var l = left;
		var t = top;
		if (l < 1) {
			l = 1;
		}
		if (t < 1) {
			t = 1;
		}
		var width = parseInt($(this).parent().css('width')) + 14;
		var height = parseInt($(this).parent().css('height')) + 14;
		var right = l + width;
		var buttom = t + height;
		var browserWidth = $(window).width();
		var browserHeight = $(window).height();
		if (right > browserWidth) {
			l = browserWidth - width;
		}
		if (buttom > browserHeight) {
			t = browserHeight - height;
		}
		$(this).parent().css({/* 修正面板位置 */
			left : l,
			top : t
		});
	}
};
$.extend($.fn.dialog.defaults, sy.onMove);
$.extend($.fn.window.defaults, sy.onMove);
$.extend($.fn.panel.defaults, sy.onMove);

/**
 * 
 * 通用错误提示
 * 
 * 用于datagrid/treegrid/tree/combogrid/combobox/form加载数据出错时的操作
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
sy.onLoadError = {
	onLoadError : function(XMLHttpRequest) {
		if (parent.$ && parent.$.messager) {
			parent.$.messager.progress('close');
			parent.$.messager.alert('错误', XMLHttpRequest.responseText);
		} else {
			$.messager.progress('close');
			$.messager.alert('错误', XMLHttpRequest.responseText);
		}
	}
};
$.extend($.fn.datagrid.defaults, sy.onLoadError);
$.extend($.fn.treegrid.defaults, sy.onLoadError);
$.extend($.fn.tree.defaults, sy.onLoadError);
$.extend($.fn.combogrid.defaults, sy.onLoadError);
$.extend($.fn.combobox.defaults, sy.onLoadError);
$.extend($.fn.form.defaults, sy.onLoadError);

/**
 * 扩展combobox在自动补全模式时,检查用户输入的字符是否存在于下拉框中,如果不存在则清空用户输入
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.combobox.defaults, {
	onShowPanel : function() {
		var _options = $(this).combobox('options');
		if (_options.mode == 'remote') {/* 如果是自动补全模式 */
			var _value = $(this).combobox('textbox').val();
			var _combobox = $(this);
			if (_value.length > 0) {
				$.post(_options.url, {
					q : _value
				}, function(result) {
					if (result && result.length > 0) {
						_combobox.combobox('loadData', result);
					}
				}, 'json');
			}
		}
	},
	onHidePanel : function() {
		var _options = $(this).combobox('options');
		if(_options.editable&&!_options.multiple){
			var _data = $(this).combobox('getData');/* 下拉框所有选项 */
			var _value = $(this).combobox('getValue');/* 用户输入的值 */
			var _b = false;/* 标识是否在下拉列表中找到了用户输入的字符 */
			for (var i = 0; i < _data.length; i++) {
				if (_data[i][_options.valueField] == _value) {
					_b=true;
					break;
				}
			}
			if(!_b){
				$(this).combobox('setValue', undefined);
			}	
		}
	},
	panelHeight:200,
	showDataSize:20,
	editable:true,//可编辑
	validate:true,//验证输入的值
	formatter:function(record){
		var opts = $(this).combobox('options');
		return record[opts.valueField]+'-'+record[opts.textField];
	},
	filter:function(q, row){//当输入数据时会调用该方法进行筛选过滤
		var opts = $(this).combobox('options');
		return row[opts.valueField].indexOf(q)>=0||row[opts.textField].indexOf(q)>=0;
	},
	onClickIcon:function(){//使用户点击combobox下拉按钮时也能执行过滤
		var opts = $(this).combobox('options');
		if(opts.editable){
			var q=$(this).combobox("getValues");
			$(this).combobox("options").keyHandler.query.call(this,q==undefined?"":q);
			$(this).combobox("validate");
		}
	},
	width:173
});
/**
 * 扩展numberbox,修改默认值
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.numberbox.defaults, {
	min:0,
	width:173
});
/**
 * 扩展combogrid在自动补全模式时,检查用户输入的字符是否存在于下拉框中,如果不存在则清空用户输入
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.combogrid.defaults, {
	onShowPanel : function() {
		var _options = $(this).combogrid('options');
		if (_options.mode == 'remote') {/* 如果是自动补全模式 */
			var _value = $(this).combogrid('textbox').val();
			if (_value.length > 0) {
				$(this).combogrid('grid').datagrid("load", {
					q : _value
				});
			}
		}
	},
	onHidePanel : function() {
		var _options = $(this).combogrid('options');
		if (_options.mode == 'remote') {/* 如果是自动补全模式 */
			var _data = $(this).combogrid('grid').datagrid('getData').rows;/* 下拉框所有选项 */
			var _value = $(this).combogrid('getValue');/* 用户输入的值 */
			var _b = false;/* 标识是否在下拉列表中找到了用户输入的字符 */
			for (var i = 0; i < _data.length; i++) {
				if (_data[i][_options.idField] == _value) {
					_b = true;
				}
			}
			if (!_b) {/* 如果在下拉列表中没找到用户输入的字符 */
				$(this).combogrid('setValue', '');
			}
		}
	}
});

/**
 * 扩展validatebox,添加新的验证功能
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 */
$.extend($.fn.validatebox.defaults.rules,
		{
			eqPwd : {/* 验证两次密码是否一致功能 */
				validator : function(value, param) {
					return value == $(param[0]).val();
				},
				message : '密码不一致!'
			},
			moreThanDate : {/* 验证开始时间是否小于结束时间,应用于结束时间标签,结束时间允许为空 */
				validator : function(value, param) {
					if (value == undefined || value == "") {
						return true;
					}
					if (param == undefined || param.length == 0) {
						return false;
					}
					var sDate = new Date($(param[0]).datetimebox('getValue'))
							.getTime();
					var eDate = new Date(value).getTime();
					return eDate > sDate;
				},
				message : '开始时间必须小于结束时间!'
			},
			multiple : {/* 验证数字是参数N的倍数 */
				validator : function(value, param) {
					if (param == undefined || param.length == 0) {
						return true;
					}
					if (value != undefined) {
						return value % param[0] == 0;
					}
					return false;
				},
				message : '必须是 {0}的倍数!'
			},
			mobile : {/* 验证手机号 */
				validator : function(value) {
					if (value == undefined || value.length == 0) {
						return true;
					}
					return value.match(/^1\d{10}$/);
				},
				message : '必须为11位手机号,手机号可不填!'
			},
			phone : {/* 验证座机号格式 */
				validator : function(value) {
					if (value == undefined || value.length == 0) {
						return true;
					}
					return value.match(/^(0\d{2,3}\-)?([2-9]\d{6,7})$/);
				},
				message : '必须为有效的座机号,可不填!'
			},
			email : {/* 验证email格式 */
				validator : function(value) {
					if (value == undefined || value.length == 0) {
						return true;
					}
					return value.match(/^.+@.+\..+$/);
				},
				message : '必须为有效的邮箱号,邮箱号可不填!'
			},
			decimal : {/* 验证小数 :param:整数位长度,小数位长度,允许为空 */
				validator : function(value, param) {
					if (param == undefined || param.length == 0) {
						return true;
					}
					var message = "";
					var regs = "^";
					if (param[0] == 0) {
						regs += "\\d+";
						message = "必须输入整数位,";
					} else {
						message = "整数位不能大于" + param[0] + "位,";
						regs += "\\d{1," + param[0] + "}";
					}
					if (param[1] == 0) {
						regs += "(\\.\\d+)?$/";
					} else {
						regs += "(\\.\\d{1," + param[1] + "})?$";
						message += "小数位不能大于" + param[1] + "位,";
					}
					if (value == undefined || value == "") {
						return true;
					}
					$.fn.validatebox.defaults.rules.decimal.message = message;
					var reg = new RegExp(regs);
					return reg.test(value);
				}
			},
			integer : {/* 验证整数,param:整数位长度,允许为空 */
				validator : function(value, param) {
					if (param == undefined || param.length == 0) {
						return true;
					}
					var message = "";
					var regs = "^";
					if (param[0] == 0) {
						regs += "\\d+$";
					} else {
						regs += "\\d{1," + param[0] + "}$";
						message = "长度不能大于" + param[0] + "位,";
					}
					if (param[1]) {
						if (value == undefined || value == "") {
							return true;
						}
						;
						message += "可不填!";
					} else {
						message += "必填!";
					}
					$.fn.validatebox.defaults.rules.integer.message = message;
					var reg = new RegExp(regs);
					return reg.test(value);
				}
			},
			maxLength:{/* 验证最大长度,param:[0]最大长度,[1]组合value的值,允许为空 */
				validator : function(value, param) {
					if (value == undefined || value.length == 0) {
						return true;
					}
					return (value+''+(param[1]==undefined?'':param[1])).length<=param[0];
				},
				message : '长度最大为{0}位!'
			},
			length:{/* 验证最大长度,param:[0]长度,允许为空 */
				validator : function(value, param) {
					if (value == undefined || value.length == 0||param==undefined||param.length==0) {
						return true;
					}
					var message = '长度应为';
					for (var i = param.length - 1; i >= 0; i--) {
						var p = param[i];
						if(value.length===p){
							return true;
						}else{
							message+=p+',';
						}
					};
					message = message.substr(0,message.length-1)+'位';
					$.fn.validatebox.defaults.rules.length.message = message;
					return false;
				}
			},
			lengthThan:{/* 验证最大长度,param:[0]最小长度,[1]最大长度,允许为空 */
				validator : function(value, param) {
					if (value == undefined || value.length == 0||param==undefined||param.length<2) {
						return true;
					}
					return value.length>=param[0]&&value.length<=param[1];
				},
				message : '长度应为{0}-{1}位!'
			},
			moreThanOrEqualsNumber:{/*大于等于参数,参数可直接传值或传递numberbox的id*/
				validator : function(value, param) {
					if (value == undefined || value == "") {
						return true;
					}
					if (param == undefined || param.length == 0) {
						return false;
					}

					if(typeof param[0] == 'number'){
						return value >= param[0];
					}else{
						var s = $(param[0]).numberbox('getValue');
						return value >= s;
					}
				},
				message : '必须大于等于{0}!'
			},
			moreThanNumber:{/*大于参数,参数可直接传值或传递numberbox的id*/
				validator : function(value, param) {
					if (value == undefined || value == "") {
						return true;
					}
					if (param == undefined || param.length == 0) {
						return false;
					}

					if(typeof param[0] == 'number'){
						return value > param[0];
					}else{
						var s = $(param[0]).numberbox('getValue');
						return value > s;
					}
				},
				message : '必须大于{0}!'
			},
			lessThanNumber:{
				/*小于参数,参数可直接传值或传递numberbox的id*/
				validator : function(value, param) {
					if (value == undefined || value == "") {
						return true;
					}
					if (param == undefined || param.length == 0) {
						return false;
					}

					if(typeof param[0] == 'number'){
						return value < param[0];
					}else{
						var s = $(param[0]).numberbox('getValue');
						return value < s;
					}
				},
				message : '必须小于{0}!'
			},
			lessThanOrEqualsNumber:{
				/*小于参数,参数可直接传值或传递numberbox的id*/
				validator : function(value, param) {
					if (value == undefined || value == "") {
						return true;
					}
					if (param == undefined || param.length == 0) {
						return false;
					}

					if(typeof param[0] == 'number'){
						return value <= param[0];
					}else{
						var s = $(param[0]).numberbox('getValue');
						return value <= s;
					}
				},
				message : '必须小于等于{0}!'
			}
		});

/**
 * 扩展tree和combotree,使其支持平滑数据格式
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 * 
 */
sy.loadFilter = {
	loadFilter : function(data, parent) {
		var opt = $(this).data().tree.options;
		var idField, textField, parentField;
		if (opt.parentField) {
			idField = opt.idField || 'id';
			textField = opt.textField || 'text';
			parentField = opt.parentField || 'pid';
			var i, l, treeData = [], tmpMap = [];
			for (i = 0, l = data.length; i < l; i++) {
				tmpMap[data[i][idField]] = data[i];
			}
			for (i = 0, l = data.length; i < l; i++) {
				if (tmpMap[data[i][parentField]]
						&& data[i][idField] != data[i][parentField]) {
					if (!tmpMap[data[i][parentField]]['children'])
						tmpMap[data[i][parentField]]['children'] = [];
					data[i]['text'] = data[i][textField];
					tmpMap[data[i][parentField]]['children'].push(data[i]);
				} else {
					data[i]['text'] = data[i][textField];
					treeData.push(data[i]);
				}
			}
			return treeData;
		}
		return data;
	}
};
$.extend($.fn.combotree.defaults, sy.loadFilter);
$.extend($.fn.tree.defaults, sy.loadFilter);

/**
 * 扩展treegrid,使其支持平滑数据格式
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 * 
 */
$.extend($.fn.treegrid.defaults, {
	loadFilter : function(data, parentId) {
		var opt = $(this).data().treegrid.options;
		var idField, treeField, parentField;
		if (opt.parentField) {
			idField = opt.idField || 'id';
			treeField = opt.textField || 'text';
			parentField = opt.parentField || 'pid';
			var i, l, treeData = [], tmpMap = [];
			for (i = 0, l = data.length; i < l; i++) {
				tmpMap[data[i][idField]] = data[i];
			}
			for (i = 0, l = data.length; i < l; i++) {
				if (tmpMap[data[i][parentField]]
						&& data[i][idField] != data[i][parentField]) {
					if (!tmpMap[data[i][parentField]]['children'])
						tmpMap[data[i][parentField]]['children'] = [];
					data[i]['text'] = data[i][treeField];
					tmpMap[data[i][parentField]]['children'].push(data[i]);
				} else {
					data[i]['text'] = data[i][treeField];
					treeData.push(data[i]);
				}
			}
			return treeData;
		}
		return data;
	}
});

/**
 * 创建一个模式化的dialog
 * 
 * @author Ray
 * 
 * @requires jQuery,EasyUI
 * 
 */
sy.modalDialog = function(options) {
	var opts = $.extend({
		title : ' ',
		width : 640,
		height : 480,
		modal : true,
		onClose : function() {
			var that = this;
			setTimeout(function() {
				$(that).dialog('destroy');
			}, 100 );
		}
	}, options);
	// opts.modal = true;// 强制此dialog为模式化,无视传递过来的modal参数
	if (options.url) {
		opts.content = '';
	}
	return $('
').dialog(opts); }; /** * 更换主题 * * @author Ray * @requires jQuery,EasyUI * @param themeName */ sy.changeTheme = function(themeName) { var $easyuiTheme = $('#easyuiTheme'); var url = $easyuiTheme.attr('href'); var href = url.substring(0, url.indexOf('themes')) + 'themes/' + themeName + '/easyui.css'; $easyuiTheme.attr('href', href); var $iframe = $('iframe'); if ($iframe.length > 0) { for (var i = 0; i < $iframe.length; i++) { var ifr = $iframe[i]; try { $(ifr).contents().find('#easyuiTheme').attr('href', href); } catch (e) { try { ifr.contentWindow.document.getElementById('easyuiTheme').href = href; } catch (e) { } } } } $.cookie('easyuiTheme', themeName, { expires : 7 }); }; /** * 滚动条 * * @author Ray * @requires jQuery,EasyUI */ sy.progressBar = function(options) { if (typeof options == 'string') { if (options == 'close') { $('#syProgressBarDiv').dialog('destroy'); } } else { if ($('#syProgressBarDiv').length < 1) { var opts = $ .extend( { title : ' ', closable : false, width : 300, height : 60, modal : true, content : '
' }, options); $('
').dialog(opts); $.parser.parse('#syProgressBarDiv'); } else { $('#syProgressBarDiv').dialog('open'); } if (options.value) { $('#syProgressBar').progressbar('setValue', options.value); } } }; /** * 支持datetimebox * * @author 雷勇 * @requires jQuery,EasyUI */ $.extend($.fn.datagrid.defaults.editors, { datetimebox : { init : function(container, options) { var input = $('') .appendTo(container); // 编辑框延迟加载 window.setTimeout(function() { input.datetimebox($.extend({ editable : false }, options)); }, 10); // input.datetimebox($.extend({ editable: false }, options)); return input; }, getValue : function(target) { return $(target).datetimebox('getValue'); }, setValue : function(target, value) { $(target).val(value); window.setTimeout(function() { $(target).datetimebox('setValue', value); }, 150); }, resize : function(target, width) { var input = $(target); if ($.boxModel == true) { input.width(width - (input.outerWidth() - input.width())); } else { input.width(width); } } } }); /** * 支持添加删除编辑器 */ $.extend($.fn.datagrid.methods, { addEditor : function(jq, param) { if (param instanceof Array) { $.each(param, function(index, item) { var e = $(jq).datagrid('getColumnOption', item.field); e.editor = item.editor; }); } else { var e = $(jq).datagrid('getColumnOption', param.field); e.editor = param.editor; } }, removeEditor : function(jq, param) { if (param instanceof Array) { $.each(param, function(index, item) { var e = $(jq).datagrid('getColumnOption', item); e.editor = {}; }); } else { var e = $(jq).datagrid('getColumnOption', param); e.editor = {}; } } }); function addChildMenu(dataset, treegrid) { var ds = dataset; var tree = treegrid; var treeColumn = tree.getTreeColumn(); var currentNode = tree.getCurrentNode(); if (currentNode != null) { logicCheck(currentNode); var record = ds.insertRecord(); var node = new RecordTreeNode(record, new SimpleTreeLevel(treeColumn)); node.setHasChild(false); currentNode.addNode(node); tree.expandNode(currentNode); } else { var record = ds.insertRecord(); var node = new RecordTreeNode(record, new SimpleTreeLevel(treeColumn)); node.setHasChild(false); tree.addRootNode(node); } tree.refresh(); } function deleteMenu(dataset, treegird) { var ds = dataset; var tree = treegird; var currentNode = tree.getCurrentNode(); if (currentNode != null) { var currentRecord = currentNode.getRecord(); ds.deleteRecord(currentRecord); deleteChildMenu(ds, currentNode); } tree.refresh(); } function deleteChildMenu(dataset, parentMenuNode) { var iter = parentMenuNode.getNodes().iterator(); while (iter.hasNext()) { var node = iter.next(); var record = node.getRecord(); dataset.deleteRecord(record); deleteChildMenu(dataset, node); } } /** * 该方法主要用来检查是否可以在当前节点下添加新的节点 */ function logicCheck(currentNode) { var currentRecord = currentNode.getRecord(); var state = currentRecord.getState(); if (state == "new" || state == "insert") { alert("该节点不是有效节点。"); throw new AbortException(); } } /** * 为所有输入类型添加获取焦点时自动选中 */ $.extend($.fn.validatebox.defaults.inputEvents, { focus:function(e){ var t=$(e.data.target); window.setTimeout(function(){ if(t.validatebox('textbox').filter(":focus").length==1){ t.validatebox('textbox').select(); } },100); } }); $.extend($.fn.textbox.defaults.inputEvents, { focus:function(e){ var t=$(e.data.target); if (t.textbox('options').editable) { window.setTimeout(function(){ if(t.textbox('textbox').filter(":focus").length==1){ t.textbox('textbox').select(); } },100); }; } }); $.extend($.fn.numberbox.defaults.inputEvents, { focus:function(e){ var t=$(e.data.target); if (t.numberbox('options').editable) { window.setTimeout(function(){ if(t.numberbox('textbox').filter(":focus").length==1){ t.numberbox('textbox').select(); } },100); }; } }); $.extend($.fn.combobox.defaults.inputEvents, { focus:function(e){ var t=$(e.data.target); if (t.context.className.indexOf('easyui-date')&&t.combobox('options').editable) { window.setTimeout(function(){ if(t.combobox('textbox').filter(":focus").length==1){ t.combobox('textbox').select(); } },100); }; } });


你可能感兴趣的:(easyui)