1 /** 2 * 包含easyui的擴展和經常使用的方法 3 * 4 * @author 5 * 6 * @version 20120806 7 */ 8 9 var wjc = $.extend({}, wjc);/* 定義全局對象,相似於命名空間或包的做用 */ 10 11 /** 12 * 13 * @requires jQuery,EasyUI 14 * 15 * panel關閉時回收內存,主要用於layout使用iframe嵌入網頁時的內存泄漏問題 16 */ 17 $.fn.panel.defaults.onBeforeDestroy = function() { 18 var frame = $('iframe', this); 19 try { 20 if (frame.length > 0) { 21 for ( var i = 0; i < frame.length; i++) { 22 frame[i].contentWindow.document.write(''); 23 frame[i].contentWindow.close(); 24 } 25 frame.remove(); 26 if ($.browser.msie) { 27 CollectGarbage(); 28 } 29 } 30 } catch (e) { 31 } 32 }; 33 34 /** 35 * 使panel和datagrid在加載時提示 36 * 37 * 38 * @requires jQuery,EasyUI 39 * 40 */ 41 $.fn.panel.defaults.loadingMessage = '加載中....'; 42 $.fn.datagrid.defaults.loadMsg = '加載中....'; 43 44 /** 45 * @author wfire 46 * 47 * @requires jQuery,EasyUI 48 * 49 * 通用錯誤提示 50 * 51 * 用於datagrid/treegrid/tree/combogrid/combobox/form加載數據出錯時的操做 52 */ 53 var easyuiErrorFunction = function(XMLHttpRequest) { 54 $.messager.progress('close'); 55 // $.messager.alert('錯誤', XMLHttpRequest.responseText); 56 // $.messager.confirm('錯 誤',XMLHttpRequest.responseText,function(r){ 57 // if (r){ 58 // parent.location.replace('login.jsp'); 59 // } 60 // }); 61 }; 62 $.fn.datagrid.defaults.onLoadError = easyuiErrorFunction; 63 $.fn.treegrid.defaults.onLoadError = easyuiErrorFunction; 64 $.fn.tree.defaults.onLoadError = easyuiErrorFunction; 65 $.fn.combogrid.defaults.onLoadError = easyuiErrorFunction; 66 $.fn.combobox.defaults.onLoadError = easyuiErrorFunction; 67 $.fn.form.defaults.onLoadError = easyuiErrorFunction; 68 69 /** 70 * 71 * @requires jQuery,EasyUI 72 * 73 * 爲datagrid、treegrid增長表頭菜單,用於顯示或隱藏列,注意:凍結列不在此菜單中 74 */ 75 var createGridHeaderContextMenu = function(e, field) { 76 e.preventDefault(); 77 var grid = $(this);/* grid自己 */ 78 var headerContextMenu = this.headerContextMenu;/* grid上的列頭菜單對象 */ 79 if (!headerContextMenu) { 80 var tmenu = $('<div style="width:100px;"></div>').appendTo('body'); 81 var fields = grid.datagrid('getColumnFields'); 82 for ( var i = 0; i < fields.length; i++) { 83 var fildOption = grid.datagrid('getColumnOption', fields[i]); 84 if (!fildOption.hidden) { 85 $('<div iconCls="icon-ok" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu); 86 } else { 87 $('<div iconCls="icon-empty" field="' + fields[i] + '"/>').html(fildOption.title).appendTo(tmenu); 88 } 89 } 90 headerContextMenu = this.headerContextMenu = tmenu.menu({ 91 onClick : function(item) { 92 var field = $(item.target).attr('field'); 93 if (item.iconCls == 'icon-ok') { 94 grid.datagrid('hideColumn', field); 95 $(this).menu('setIcon', { 96 target : item.target, 97 iconCls : 'icon-empty' 98 }); 99 } else { 100 grid.datagrid('showColumn', field); 101 $(this).menu('setIcon', { 102 target : item.target, 103 iconCls : 'icon-ok' 104 }); 105 } 106 } 107 }); 108 } 109 headerContextMenu.menu('show', { 110 left : e.pageX, 111 top : e.pageY 112 }); 113 }; 114 $.fn.datagrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu; 115 $.fn.treegrid.defaults.onHeaderContextMenu = createGridHeaderContextMenu; 116 117 /** 118 * 119 * @requires jQuery,EasyUI 120 * 121 * 擴展validatebox,添加驗證兩次密碼功能 122 */ 123 $.extend($.fn.validatebox.defaults.rules, { 124 eqPwd : { 125 validator : function(value, param) { 126 return value == $(param[0]).val(); 127 }, 128 message : '密碼不一致!' 129 }, 130 idcard : {// 驗證身份證 131 validator : function(value) { 132 return /^\d{15}(\d{2}[A-Za-z0-9])?$/i.test(value); 133 }, 134 message : '身份證號碼格式不正確' 135 }, 136 minLength: { 137 validator: function(value, param){ 138 return value.length >= param[0]; 139 }, 140 message: '請輸入至少(2)個字符.' 141 }, 142 length:{validator:function(value,param){ 143 var len=$.trim(value).length; 144 return len>=param[0]&&len<=param[1]; 145 }, 146 message:"輸入內容長度必須介於{0}和{1}之間." 147 }, 148 phone : {// 驗證電話號碼 149 validator : function(value) { 150 return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value); 151 }, 152 message : '格式不正確,請使用下面格式:010-88888888' 153 }, 154 mobile : {// 驗證手機號碼 155 validator : function(value) { 156 return /^(13|15|18)\d{9}$/i.test(value); 157 }, 158 message : '手機號碼格式不正確' 159 }, 160 intOrFloat : {// 驗證整數或小數 161 validator : function(value) { 162 return /^\d+(\.\d+)?$/i.test(value); 163 }, 164 message : '請輸入數字,並確保格式正確' 165 }, 166 currency : {// 驗證貨幣 167 validator : function(value) { 168 return /^\d+(\.\d+)?$/i.test(value); 169 }, 170 message : '貨幣格式不正確' 171 }, 172 qq : {// 驗證QQ,從10000開始 173 validator : function(value) { 174 return /^[1-9]\d{4,9}$/i.test(value); 175 }, 176 message : 'QQ號碼格式不正確' 177 }, 178 integer : {// 驗證整數 179 validator : function(value) { 180 return /^[+]?[1-9]+\d*$/i.test(value); 181 }, 182 message : '請輸入整數' 183 }, 184 age : {// 驗證年齡 185 validator : function(value) { 186 return /^(?:[1-9][0-9]?|1[01][0-9]|120)$/i.test(value); 187 }, 188 message : '年齡必須是0到120之間的整數' 189 }, 190 chinese : {// 驗證中文 191 validator : function(value) { 192 return /^[\Α-\¥]+$/i.test(value); 193 }, 194 message : '請輸入中文' 195 }, 196 english : {// 驗證英語 197 validator : function(value) { 198 return /^[A-Za-z]+$/i.test(value); 199 }, 200 message : '請輸入英文' 201 }, 202 unnormal : {// 驗證是否包含空格和非法字符 203 validator : function(value) { 204 return /.+/i.test(value); 205 }, 206 message : '輸入值不能爲空和包含其餘非法字符' 207 }, 208 username : {// 驗證用戶名 209 validator : function(value) { 210 return /^[a-zA-Z][a-zA-Z0-9_]{5,15}$/i.test(value); 211 }, 212 message : '用戶名不合法(字母開頭,容許6-16字節,容許字母數字下劃線)' 213 }, 214 faxno : {// 驗證傳真 215 validator : function(value) { 216 return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value); 217 }, 218 message : '傳真號碼不正確' 219 }, 220 zip : {// 驗證郵政編碼 221 validator : function(value) { 222 return /^[0-9]\d{5}$/i.test(value); 223 }, 224 message : '郵政編碼格式不正確' 225 }, 226 ip : {// 驗證IP地址 227 validator : function(value) { 228 return /d+.d+.d+.d+/i.test(value); 229 }, 230 message : 'IP地址格式不正確' 231 }, 232 name : {// 驗證姓名,能夠是中文或英文 233 validator : function(value) { 234 return /^[\Α-\¥]+$/i.test(value)|/^\w+[\w\s]+\w+$/i.test(value); 235 }, 236 message : '請輸入姓名' 237 }, 238 msn:{ 239 validator : function(value){ 240 return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value); 241 }, 242 message : '請輸入有效的msn帳號(例:abc@hotnail(msn/live).com)' 243 } 244 }); 245 246 /** 247 * 248 * @requires jQuery,EasyUI 249 * 250 * 擴展tree,使其支持平滑數據格式 251 */ 252 $.fn.tree.defaults.loadFilter = function(data, parent) { 253 var opt = $(this).data().tree.options; 254 var idFiled, textFiled, parentField; 255 if (opt.parentField) { 256 idFiled = opt.idFiled || 'id'; 257 textFiled = opt.textFiled || 'text'; 258 parentField = opt.parentField; 259 var i, l, treeData = [], tmpMap = []; 260 for (i = 0, l = data.length; i < l; i++) { 261 tmpMap[data[i][idFiled]] = data[i]; 262 } 263 for (i = 0, l = data.length; i < l; i++) { 264 if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) { 265 if (!tmpMap[data[i][parentField]]['children']) 266 tmpMap[data[i][parentField]]['children'] = []; 267 data[i]['text'] = data[i][textFiled]; 268 tmpMap[data[i][parentField]]['children'].push(data[i]); 269 } else { 270 data[i]['text'] = data[i][textFiled]; 271 treeData.push(data[i]); 272 } 273 } 274 return treeData; 275 } 276 return data; 277 }; 278 279 /** 280 * 281 * @requires jQuery,EasyUI 282 * 283 * 擴展treegrid,使其支持平滑數據格式 284 */ 285 $.fn.treegrid.defaults.loadFilter = function(data, parentId) { 286 var opt = $(this).data().treegrid.options; 287 var idFiled, textFiled, parentField; 288 if (opt.parentField) { 289 idFiled = opt.idFiled || 'id'; 290 textFiled = opt.textFiled || 'text'; 291 parentField = opt.parentField; 292 var i, l, treeData = [], tmpMap = []; 293 for (i = 0, l = data.length; i < l; i++) { 294 tmpMap[data[i][idFiled]] = data[i]; 295 } 296 for (i = 0, l = data.length; i < l; i++) { 297 if (tmpMap[data[i][parentField]] && data[i][idFiled] != data[i][parentField]) { 298 if (!tmpMap[data[i][parentField]]['children']) 299 tmpMap[data[i][parentField]]['children'] = []; 300 data[i]['text'] = data[i][textFiled]; 301 tmpMap[data[i][parentField]]['children'].push(data[i]); 302 } else { 303 data[i]['text'] = data[i][textFiled]; 304 treeData.push(data[i]); 305 } 306 } 307 return treeData; 308 } 309 return data; 310 }; 311 312 /** 313 * @author wfire 314 * 315 * @requires jQuery,EasyUI 316 * 317 * 擴展combotree,使其支持平滑數據格式 318 */ 319 $.fn.combotree.defaults.loadFilter = $.fn.tree.defaults.loadFilter; 320 321 /** 322 * 323 * @requires jQuery,EasyUI 324 * 325 * 防止panel/window/dialog組件超出瀏覽器邊界 326 * @param left 327 * @param top 328 */ 329 var easyuiPanelOnMove = function(left, top) { 330 var l = left; 331 var t = top; 332 if (l < 1) { 333 l = 1; 334 } 335 if (t < 1) { 336 t = 1; 337 } 338 var width = parseInt($(this).parent().css('width')) + 14; 339 var height = parseInt($(this).parent().css('height')) + 14; 340 var right = l + width; 341 var buttom = t + height; 342 var browserWidth = $(window).width(); 343 var browserHeight = $(window).height(); 344 if (right > browserWidth) { 345 l = browserWidth - width; 346 } 347 if (buttom > browserHeight) { 348 t = browserHeight - height; 349 } 350 $(this).parent().css({/* 修正面板位置 */ 351 left : l, 352 top : t 353 }); 354 }; 355 $.fn.dialog.defaults.onMove = easyuiPanelOnMove; 356 $.fn.window.defaults.onMove = easyuiPanelOnMove; 357 $.fn.panel.defaults.onMove = easyuiPanelOnMove; 358 359 /** 360 * 361 * @requires jQuery,EasyUI,jQuery cookie plugin 362 * 363 * 更換EasyUI主題的方法 364 * 365 * @param themeName 366 * 主題名稱 367 */ 368 changeTheme = function(themeName) { 369 var $easyuiTheme = $('#easyuiTheme'); 370 var url = $easyuiTheme.attr('href'); 371 var href = url.substring(0, url.indexOf('themes')) + 'themes/' + themeName + '/easyui.css'; 372 $easyuiTheme.attr('href', href); 373 374 var $iframe = $('iframe'); 375 if ($iframe.length > 0) { 376 for ( var i = 0; i < $iframe.length; i++) { 377 var ifr = $iframe[i]; 378 $(ifr).contents().find('#easyuiTheme').attr('href', href); 379 } 380 } 381 382 $.cookie('easyuiThemeName', themeName, { 383 expires : 7 384 }); 385 }; 386 387 388 serializeObject = function(form) { 389 var o = {}; 390 $.each(form.serializeArray(), function(index) { 391 if (o[this['name']]) { 392 o[this['name']] = o[this['name']] + "," + this['value']; 393 } else { 394 o[this['name']] = this['value']; 395 } 396 }); 397 return o; 398 }; 399 400 /** 401 * 402 * 增長formatString功能 403 * 404 * 使用方法:formatString('字符串{0}字符串{1}字符串','第一個變量','第二個變量'); 405 * 406 * @returns 格式化後的字符串 407 */ 408 formatString = function(str) { 409 for ( var i = 0; i < arguments.length - 1; i++) { 410 str = str.replace("{" + i + "}", arguments[i + 1]); 411 } 412 return str; 413 }; 414 415 416 stringToList = function(value) { 417 if (value != undefined && value != '') { 418 var values = []; 419 var t = value.split(','); 420 for ( var i = 0; i < t.length; i++) { 421 values.push('' + t[i]);/* 避免他將ID當成數字 */ 422 } 423 return values; 424 } else { 425 return []; 426 } 427 }; 428 429 430 //$.ajaxSetup({ 431 // type : 'POST', 432 // error : function(XMLHttpRequest, textStatus, errorThrown) { 433 // $.messager.progress('close'); 434 // $.messager.alert('錯誤', errorThrown); 435 // } 436 //}); 437 /** 438 * @author 439 * 440 * @requires jQuery 441 * 442 * 判斷瀏覽器是不是IE而且版本小於8 443 * 444 * @returns true/false 445 */ 446 wjc.isLessThanIe7 = function() { 447 return ($.browser.msie && $.browser.version < 7); 448 }; 449 450 //時間格式化 451 wjc.dateFormat = function (format) { 452 /* 453 * eg:format="yyyy-MM-dd hh:mm:ss"; 454 */ 455 if (!format) { 456 format = "yyyy-MM-dd hh:mm:ss"; 457 } 458 459 var o = { 460 "M+" : this.getMonth() + 1, // month 461 "d+" : this.getDate(), // day 462 "h+" : this.getHours(), // hour 463 "m+" : this.getMinutes(), // minute 464 "s+" : this.getSeconds(), // second 465 "q+" : Math.floor((this.getMonth() + 3) / 3), // quarter 466 "S" : this.getMilliseconds() 467 // millisecond 468 }; 469 470 if (/(y+)/.test(format)) { 471 format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); 472 } 473 474 for (var k in o) { 475 if (new RegExp("(" + k + ")").test(format)) { 476 format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); 477 } 478 } 479 return format; 480 };
出自:http://www.cnblogs.com/exmyth/p/4046216.htmlcss