Thinking

          快樂編程,開心生活
          posts - 21, comments - 27, trackbacks - 0, articles - -5
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2007年11月27日

          CCP Review-Javascript
          1、對于div中的input標(biāo)簽,如果div的style.display屬性為'none',那么調(diào)用input標(biāo)簽的focus方法在IE6.0上會報(bào)錯(cuò),首先應(yīng)該讓其display屬性為''或者'block'再調(diào)用;
          2、當(dāng)HTML元素的name屬性唯一時(shí)可以利用document.getElementById()調(diào)用獲得這個(gè)元素;
          3、如果異步提交耗時(shí)較長,可在異步提交之前顯示等待提示,在回調(diào)函數(shù)中根據(jù)返回值更新提示;
          4、在JS中function也是可以作為變量的,所以我們可以在自己封裝的框架中預(yù)留回調(diào)函數(shù)供自定義使用,如下面的代碼:
           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中可以使用正則表達(dá)式來校驗(yàn)數(shù)字域、日期域和EMail等。代碼示例如下:
          校驗(yàn)日期的例子:
           1     function isDate(date){
           2         //對日期格式進(jìn)行驗(yàn)證 要求為2000-2099年  格式為 yyyy-mm-dd 并且可以正常轉(zhuǎn)換成正確的日期
           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     }
            這篇文章有詳細(xì)的說明:http://www.aygfsteel.com/byterat/archive/2006/12/20/89143.html
            這本電子書是講解正則表達(dá)式的:http://www.aygfsteel.com/Files/kawaii/RegularExpressions.zip 
          6、在JS編碼中,如果代碼量較大,要注意防止function名稱重復(fù),包括直接在頁面上編寫的和引用外部JS文件的,不然會出現(xiàn)一些莫名奇妙的問題;
          7、注意JS代碼中的函數(shù)返回語句return的使用;
          8、盡量把JS代碼寫在外部公共的文件中,而在頁面中引入,好處有:a.函數(shù)復(fù)用;b.JS文件緩存;c.提供頁面解析速度。基于b,我們在修改JS代碼后,要看IE的設(shè)置是否將原先的JS文件緩存造成問題;
          9、對于同一個(gè)頁面的多個(gè)表單提交,我們可以在第一個(gè)表單中設(shè)置相應(yīng)的隱藏域,在表單提交之前利用JS腳本把其他表單的數(shù)據(jù)設(shè)置到第一個(gè)表單的隱藏域中;
          10、對于異步校驗(yàn)的文本框,我們一般設(shè)置觸發(fā)事件為onblur而不是onchange或者onpropertychange,以減少客戶端和服務(wù)器的交互次數(shù),但應(yīng)該注意如果這個(gè)文本框最初沒有獲得焦點(diǎn),那么onblur就不會觸發(fā),可以先調(diào)用以下onfocus,再調(diào)用onblur手動觸發(fā);
          11、JS中不存在trim()函數(shù),自定義如下:
           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(01);
           8         while (ch == " ") {
           9                //檢查字符串開始部分的空格
          10             retValue = retValue.substring(1, retValue.length);
          11             ch = retValue.substring(01);
          12         }
          13         ch = retValue.substring(retValue.length-1, retValue.length);
          14         while (ch == " ") {
          15             //檢查字符串結(jié)束部分的空格
          16             retValue = retValue.substring(0, retValue.length-1);
          17             ch = retValue.substring(retValue.length-1, retValue.length);
          18         }
          19         while (retValue.indexOf("  "!= -1) {
          20             //將文字中間多個(gè)相連的空格變?yōu)橐粋€(gè)空格
          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設(shè)置返回值,然后在父頁面中我們通過returnVal可以拿到返回值。

          posted @ 2007-11-27 23:41 lixw 閱讀(287) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 固始县| 囊谦县| 西乌珠穆沁旗| 江阴市| 中西区| 九寨沟县| 桐乡市| 湛江市| 兴文县| 康平县| 铜陵市| 中牟县| 清丰县| 莱阳市| 集贤县| 高清| 长治县| 永昌县| 荣昌县| 平昌县| 利辛县| 宿松县| 北辰区| 竹溪县| 虹口区| 平昌县| 通辽市| 兴仁县| 张北县| 永兴县| 华亭县| 仙游县| 和平县| 喀喇沁旗| 临高县| 大渡口区| 班玛县| 西和县| 禄劝| 山阴县| 镇赉县|