easyui扩展JS

来源:互联网 发布:mac androidsdk 编辑:程序博客网 时间:2024/05/22 03:13

根据业务进行的扩展,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 = '<iframe id="" src="'+ options.url+ '" allowTransparency="true" scrolling="auto" width="100%" height="98%" frameBorder="0" name=""></iframe>';}return $('<div/>').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 : '<div id="syProgressBar" class="easyui-progressbar" data-options="value:0"></div>'}, options);$('<div id="syProgressBarDiv"/>').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 = $('<input type="text" class="easyui-datetimebox">').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);};}});


0 0
原创粉丝点击