lycong

          Fix 問題: 進入編輯頁面,當點擊其他地方時,判斷頁面是否修改過,并提示相關信息。

                  問題如下:例如要修改某個人的信息時,進入編輯頁面,當點擊其他地方時,判斷信息是否已被修改過,并提示相關信息。
                  本例中以個人通訊錄信息為背景, 解決方法如下:
          1.首先要有個 Object保存 一開始時從服務器得到的初始數據:
           
           var cachedFormContent = {};

                
          function fCacheForm() {   //首先cache個人通訊錄的信息
                    cachedFormContent.FN = fGetOri("FN");
                    cachedFormContent.email 
          = fGetOri("EMAIL;PREF");
                    cachedFormContent.groups 
          = fGetOriGrps();
                    cachedFormContent.BDAY 
          = fGetOriBDAY();
                    cachedFormContent.CELL 
          = fGetOri("TEL;CELL;VOICE");
                    cachedFormContent.ICQ 
          = fGetOri("ICQ");
                    cachedFormContent.URL 
          = fGetOri("URL");
                    cachedFormContent.ADR_HOME 
          = fGetOri("ADR;HOME");
                    cachedFormContent.PC_HOME 
          = fGetOri("PC;HOME");
                    cachedFormContent.TEL_HOME 
          = fGetOri("TEL;HOME;VOICE");
                    cachedFormContent.ORGNAME 
          = fGetOri("ORGNAME");
                    cachedFormContent.ADR_WORK 
          = fGetOri("ADR;WORK");
                    cachedFormContent.PC_WORK 
          = fGetOri("PC;WORK");
                    cachedFormContent.TEL_WORK 
          = fGetOri("TEL;WORK;VOICE");
                    cachedFormContent.FAX 
          = fGetOri("TEL;WORK;FAX");

                }
          2. 利用 JSON標簽從服務器端得到個人通訊錄的信息,并轉化為js能識別的內容,并寫一個函數用來獲得原來的字段所對應的值
          var original = <wm:JSON value="${original_user}" />;    //得到初始的個人通訊錄資料

                
          function fGetOri(name) {  //name:為字段名, 返回:通訊錄個人屬性
                    var empty = "";
                    
          if (original[name] == null{
                        
          return empty;
                    }

                    
          return original[name];
                }


                
          function fGetOriGrps() {    //從服務器得到的初始分組
                    var pabGrps = [];
                    pabGrps 
          =<wm:JSON value="${original_user['groups']}" />;
                    
          return pabGrps;
                }
          3.寫函數判斷 離開前查看內容是否修改過, 從cacheFormContent 和當前內容對比, 同時要有函數獲取當前屬性的value值
                function fCheckBeforeLeaving() {  //離開前查看是否修改過
                    var result = true;
                    
          if (fHaveBeenModified()) {
                        
          return false;
                    }

                    
          return result;
                }


                
          function fHaveBeenModified() {    //cache 和當前不同 則表示修改過
                    var c = cachedFormContent;
                    
          return c.FN != fGetContent("p_FN"|| c.email != fGetContent("p_EMAIL;PREF"|| compareGrps(c, fGetGrps())
                            
          || c.BDAY != fGetContent("p_BDAY")
                            
          || c.CELL != fGetContent("p_TEL;CELL;VOICE"|| c.ICQ != fGetContent("p_ICQ"|| c.URL != fGetContent("p_URL")
                            
          || c.ADR_HOME != fGetContent("p_ADR;HOME"|| c.PC_HOME != fGetContent("p_PC;HOME"|| c.TEL_HOME != fGetContent("p_TEL;HOME;VOICE")
                            
          || c.ORGNAME != fGetContent("p_ORGNAME"|| c.ADR_WORK != fGetContent("p_ADR;WORK"|| c.PC_WORK != fGetContent("p_PC;WORK")
                            
          || c.TEL_WORK != fGetContent("p_TEL;WORK;VOICE"|| c.FAX != fGetContent("p_TEL;WORK;FAX");
                }


                
          function fGetGrps() {         //獲得所屬聯系組
                    var grps = document.getElementsByName("p_groups");
                    
          var checked_grps = [];
                    
          for (var i = 0; i < grps.length; i++{
                        
          var grp = grps[i];
                        
          if (grp.checked) {
                            checked_grps[checked_grps.length] 
          = grp.value;
                        }

                    }


                    
          return checked_grps;
                }


                
          function compareGrps(c, grp) {
                    
          var groups = c.groups;
                    
          if (groups.length != grp.length) {
                        
          return true;
                    }

                    
          for (var i = 0; i < groups.length; i++{
                        
          if (groups[i] != grp[i]) {
                            
          return true;
                        }


                    }

                    
          return false;
                }


                
          function fGetContent(item0) {
                    
          var content = document.getElementsByName(item0);
                    
          var val = content[0].value;
                    
          return val;
                }
          4.利用javascript 的 setTimeout()函數 來 每隔一段時間就更新一次cacheFormContent的值(其實在這里每次獲取的值都是相同,只是用作開始時就獲取cacheFormContent),最后用window.onbeforeunload進行加載,注意不要用onload (2者之間的差別請差相關資料)

                setTimeout(fCacheForm, 
          50);


                window.onbeforeunload 
          = function() {
                    
          var msg = gLang.pab.msg;
                    
          var pabForm = $("pabEdit");
                    
          if (check && !fCheckBeforeLeaving()) {   //檢查是否已修改過,并提示要保存
                        return msg["pab_save_before_cancel"];
                        pabForm.submit();
                    }

                }

          posted on 2008-06-16 21:50 cong 閱讀(622) 評論(0)  編輯  收藏 所屬分類: JavaScript

          My Links

          Blog Stats

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 辽源市| 宣恩县| 大足县| 互助| 花莲市| 弥勒县| 盘锦市| 绥江县| 土默特右旗| 乌审旗| 内乡县| 钦州市| 府谷县| 琼结县| 雷波县| 桂平市| 宜昌市| 衡东县| 湖北省| 驻马店市| 成都市| 桂林市| 临沭县| 磐安县| 正定县| 延安市| 长葛市| 普兰店市| 博湖县| 原阳县| 广西| 望谟县| 新巴尔虎左旗| 隆子县| 肥东县| 昭平县| 银川市| 沙河市| 遂川县| 从化市| 双牌县|