可謂一勞永逸,不要重複造輪子:)
1.常用的方法統一放置
例如:在使用者註冊時,時常需要判斷文字框中字元是否是漢字、英文、數字或郵箱地址等等。何不把這些方法統一放在一個指令碼中,取名叫做utility.js呢?
複製代碼 代碼如下://待需要時另存新檔一個js
function isNull(obj)
{
if (!obj || obj.length==0 || obj=="")
{
parent.MyAlert("標註名不可為空!",alertImg);
return false;
}
else
{
return true;
}
}
// 驗證是否為整數
function isNumber(oNum)
{
if(!oNum) return false;
try{
if(parseInt(oNum)!=oNum) {
parent.MyAlert("查詢距離請填寫正整數!",alertImg);
return false;
}
}
catch(ex)
{
parent.MyAlert("查詢距離請填寫正整數!",alertImg);
return false;
}
return true;
}
// 驗證是否為中文
function isChinese(oCn)
{
if (!oCn || oCn.length==0) return false;
try{
var reg = /^[\u4e00-\u9fa5]+$/i; //含中文
if ( reg.test(oCn) )
{
return true;
}
else{
parent.MyAlert("關鍵字請填寫中文!",alertImg);
return false;
}
}
catch(ex)
{
parent.MyAlert("關鍵字請填寫中文!",alertImg);
return false;
}
}
// 驗證是否為中文或字母
function isEnCh(oStr)
{
if (!oStr || oStr.length==0) return false;
try{
var reg = /^[a-zA-Z\u4E00-\u9FA5]/g; //含中文或拼音
if ( reg.test(oStr) )
{
return true;
}
else{
parent.MyAlert("地名請填寫中文或拼音!",alertImg);
return false;
}
}
catch(ex)
{
parent.MyAlert("地名請填寫中文或拼音!",alertImg);
return false;
}
}
// 結果保留2位小數
function roundAmount(n){
var s = "" + Math.round(n * 100) / 100;
var i = s.indexOf('.')
if (i < 0) return s + ".00";
var t = s.substring(0, i + 1) + s.substring(i + 1, i + 3);
if (i + 2 == s.length) t += "0";
return t;
}
2.提示、報錯資訊統一放置
看了上面的代碼,您是否也發現一個問題:下一個項目中如果提示、報錯資訊不一樣,還需要重新改動上述代碼。何不把提示資訊統一放在一個指令碼中,取名叫做resource_zh.js呢?
在多語言版本的軟體中,也有用類似的招數達到切換介面語言,有發現?呵呵。 複製代碼 代碼如下:var page_res = {
"meter": "米",
"kilometer": "千米(公裡)",
"mile": "英裡",
"yard": "碼",
"degree": "度",
"millimeter": "毫米",
"saveMap": "儲存地圖",
"printMap": "列印地圖",
"queryResult": "查詢結果",
"queryResultNull": "查詢結果為空白",
"experssionCanNotNull": "查詢運算式不可為空",
"networkInfo": "路徑資訊",
"arcInfo": "弧段資訊",
"addEntitySuccess": "添加地物成功! ",
"addEntityFail": "添加地物失敗!",
"updateEntitySuccess": "更新地物成功!",
"updateEntityFail": "更新地物失敗!",
"updatePropertySuccess": "更新屬性成功!",
"updatePropertyFail": "更新屬性失敗!",
"deleteEntitySuccess": "刪除地物成功!",
"deleteEntityFail": "刪除地物失敗!",
"closestFacilityFail": "最近設施分析失敗,請重新選擇",
"fieldCanNotNull": "欄位數不可為空",
"fieldMustInteger": "欄位數必須為整數",
"fieldMustMoreThanZero": "欄位數必須大於0",
"numberCanNotNull": "數值不可為空"
}
我們可以把常用的單位、按鈕文本、提示資訊都放在這裡。然後最先載入該指令碼,通過eval執行個體化出一個對象。通過類似res.networkInfo便可獲得對應的內容。
3.AjaxRequest請求封裝
跟第一點意義是一致的,在現在開發中頻繁使用Ajax,如果您沒用jQuery等指令碼庫的話,可能是自己寫每次請求和回調的函數。何不把這些方法都放在一個ajax.js中呢? 複製代碼 代碼如下:var xmlhttpObj=false;
function XHR(CallBack)
{
this.callback=CallBack;
}
XHR.createXMLHttp = function ()
{
if(window.ActiveXObject) //IE瀏覽器
{
try
{
xmlhttpObj = new ActiveXObject("Microsoft.XMLHTTP");//IE4.0
}
catch (e)
{
try
{
xmlhttpObj = new ActiveXObject("Msxml2.XMLHTTP");//IE5.0以上
}
catch (e2)
{
xmlhttpObj=false;
}
}
}
else if(window.XMLHttpRequest&&!xmlhttpObj) //開放瀏覽器
{
xmlhttpObj = new XMLHttpRequest();
}
}
XHR.prototype.Onstar = function (method,Url,bFlag,param)
{
if(this.callback!=null)
{
XHR.createXMLHttp();
xmlhttpObj.onreadystatechange=this.callback;
xmlhttpObj.open(method,Url,bFlag);
xmlhttpObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
xmlhttpObj.send(param);
}
else
{
alert("沒有用戶端處理函數!")
}
}
在使用時執行個體化一個XHR對象出來,例如:var legendObj=new XHR(function (){...}); 然後用legendObj.Onstar("POST","Handlers/legendHandler.ashx",false,"mapName=" + mapName);提交請求即可。