CCP Review-Javascript
1、對于div中的input標簽,如果div的style.display屬性為'none',那么調用input標簽的focus方法在IE6.0上會報錯,首先應該讓其display屬性為''或者'block'再調用;
2、當HTML元素的name屬性唯一時可以利用document.getElementById()調用獲得這個元素;
3、如果異步提交耗時較長,可在異步提交之前顯示等待提示,在回調函數中根據返回值更新提示;
4、在JS中function也是可以作為變量的,所以我們可以在自己封裝的框架中預留回調函數供自定義使用,如下面的代碼:
1 //common.js
2 var callback = null;
3 function commonUse(){
4 
5 if(typeof(callback) == "function"){
6 callback(
);
7 }
8 
9 }
10
11 //self.js
12 function selfUse(){
13 
14 callback = function(
){
15 //do something before
16 }
17 commonUse();
18 
19 }
5、JS中可以使用正則表達式來校驗數字域、日期域和EMail等。代碼示例如下:
校驗日期的例子:
1 function isDate(date){
2 //對日期格式進行驗證 要求為2000-2099年 格式為 yyyy-mm-dd 并且可以正常轉換成正確的日期
3 var regex=/^(19|20)\d{2}-((0[1-9]{1})|(1[0-2]{1}))-((0[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1}))$/;
4
5 if(!regex.test(date)){
6 return false;
7 }
8 var arr_=date.split("-");
9 var tmp = new Date(arr_[0], parseFloat(arr_[1])-1, parseFloat(arr_[2]));
10 if(tmp.getFullYear()!=parseFloat(arr_[0])
11 || tmp.getMonth()!=parseFloat(arr_[1])-1
12 || tmp.getDate()!=parseFloat(arr_[2])){
13 return false;
14 }
15
16 return true;
17 }
這篇文章有詳細的說明:
http://www.tkk7.com/byterat/archive/2006/12/20/89143.html
這本電子書是講解正則表達式的:
http://www.tkk7.com/Files/kawaii/RegularExpressions.zip
6、在JS編碼中,如果代碼量較大,要注意防止function名稱重復,包括直接在頁面上編寫的和引用外部JS文件的,不然會出現一些莫名奇妙的問題;
7、注意JS代碼中的函數返回語句return的使用;
8、盡量把JS代碼寫在外部公共的文件中,而在頁面中引入,好處有:a.函數復用;b.JS文件緩存;c.提供頁面解析速度。基于b,我們在修改JS代碼后,要看IE的設置是否將原先的JS文件緩存造成問題;
9、對于同一個頁面的多個表單提交,我們可以在第一個表單中設置相應的隱藏域,在表單提交之前利用JS腳本把其他表單的數據設置到第一個表單的隱藏域中;
10、對于異步校驗的文本框,我們一般設置觸發事件為onblur而不是onchange或者onpropertychange,以減少客戶端和服務器的交互次數,但應該注意如果這個文本框最初沒有獲得焦點,那么onblur就不會觸發,可以先調用以下onfocus,再調用onblur手動觸發;
11、JS中不存在trim()函數,自定義如下:
1 //JS去除首尾空格(同VBS的Trim)
2 function trim(inputString) {
3 if (typeof inputString != "string") {
4 return inputString;
5 }
6 var retValue = inputString;
7 var ch = retValue.substring(0, 1);
8 while (ch == " ") {
9 //檢查字符串開始部分的空格
10 retValue = retValue.substring(1, retValue.length);
11 ch = retValue.substring(0, 1);
12 }
13 ch = retValue.substring(retValue.length-1, retValue.length);
14 while (ch == " ") {
15 //檢查字符串結束部分的空格
16 retValue = retValue.substring(0, retValue.length-1);
17 ch = retValue.substring(retValue.length-1, retValue.length);
18 }
19 while (retValue.indexOf(" ") != -1) {
20 //將文字中間多個相連的空格變為一個空格
21 retValue = retValue.substring(0, retValue.indexOf(" "))
22 + retValue.substring(retValue.indexOf(" ")+1, retValue.length);
23 }
24 return retValue;
25 }
12、JS中顯示模式窗口,代碼如下:
1 function showMyDialog(){
2 var dialogProperty = 'dialogWidth:800px;dialogHeight:600px;status:no';
3 var windowProperty = "height=800,width=800,status=no,toolbar=no,menubar=yes,location=yes,resizable=yes,scrollbars=yes";
4
5 var url = "SomeAction.do?id="+id+"&flag=true";
6 var returnVal = window.showModalDialog(url,"", dialogProperty);
7 if(typeof(returnVal) == "undefined"){
8 return;
9 }
10 if(returnVal != ""){
11 //do something
12 }
13 }
14
在新打開的模式窗口中,我們通過
window.returnValue設置返回值,然后在父頁面中我們通過returnVal可以拿到返回值。