囝濼的博客[www.bluenuo.cn]

          網盤[disk.bluenuo.cn]
          隨筆 - 6, 文章 - 1, 評論 - 11, 引用 - 0
          數據加載中……

          通用離開頁面前檢查form內容是否發生改變

          文/囝濼 www.bluenuo.cn

          使用方法:
          1.在需要的頁面引入javascript核心代碼(下面有,復制粘貼即可)
          2.在body的onload事件中加入saveElementsOnLoad(myform);方法,其中myform是所驗證的form對象
          3.在body的onbeforeunload事件中加入return checkFormOnUnload(myform);其中myform是所驗證的form對象
          4.ignoreFormCheck()和forceFormCheck()函數為一對姐妹函數,供用戶在自己的jsp頁面中調用,以處理特殊情況,如按保存按鈕不檢查form是否改變、導入上次保存結果,沒保存離開頁面需要強制提示等情況。這兩個函數如果多次調用,以程序流程中最后調用的那個函數為準,其他調用將不產生影響
          ignoreFormCheck()為忽略離開頁面驗證,用戶在自己的javascript函數中調用該方法后即使form發生改變離開頁面時也不做任何判斷即可離開
          forceFormCheck()為強制離開頁面驗證,用戶在自己的javascript函數中調用該方法后即使form沒有發生改變,離開頁面也會提示form已經改變
          5.getFormStatus(myform)方法可隨時檢查form是否已經改變,改變返回ture,否則返回false,其中myform是所檢查的form對象
          使用示例
          示例代碼下載
          javascript核心代碼
          使用時復制到<script>標簽體中即可

                  //保存form里的所有原始屬性
                  var alSavedElements = new Array();
                  
          //是否判斷form的屬性改變,true判斷,false不判斷
                  var bCheckForm = true;
                  
                  
          /**
                   * 頁面加載時候的操作,所有頁面加載時的操作可以在這里進行擴展
                   * @param form 所要保存屬性的form
                   
          */

                  
          function saveElementsOnLoad(form) {
                      saveFormElements(form);
                  }

                  
                  
          /**
                   * 離開頁面時的操作,所有離開頁面前的操作可在這里進行擴展
                   * @param form 所要保存屬性的form
                   * @param elements 所保存的屬性的數組
                   * @return 離開頁面的提示信息
                   
          */

                  
          function checkFormOnUnload(form) {
                      
          var bFormStatus = isFormChanged(form);
                      
          if(bCheckForm && bFormStatus) {
                          
          return "該頁面已經被修改,離開后所有修改全部丟失!"
                      }

                      
          return;
                  }

                  
                  
          /**
                   * 保存form的所有屬性
                   * @param form 所要保存的屬性的form
                   
          */

                  
          function saveFormElements(form) {
                      
          for(var i = 0 ; i < form.elements.length ; i++ ) {
                          
          if("select-one" == form.elements[i].type) {
                              alSavedElements.push(form.elements[i].selectedIndex);
                              
          continue;
                          }

                          
          if("radio" == form.elements[i].type || "checkbox" == form.elements[i].type) {
                              alSavedElements.push(form.elements[i].checked);
                              
          continue;
                          }

                          alSavedElements.push(form.elements[i].value);
                      }

                  }

                  
                  
          /**
                   * 檢查form的屬性是否改變
                   * @param form 所比較的form
                   * @param alSavedElements 所比較的原始屬性數組
                   * @return true form已變化 false form沒變化
                   
          */

                  
          function isFormChanged(form) {
                      
          var bChanged = false;
                      
          if(form.elements.length!=alSavedElements.length) {
                          bChanged 
          = true;
                          
          return bChanged;
                      }

                      
          for(var i = 0 ; i < form.elements.length ; i++ ) {
                          
          if("submit" != form.elements[i].type && "button" != form.elements[i].type && "reset" != form.elements[i].type && "hidden" != form.elements[i].type && "radio" != form.elements[i].type && "checkbox" != form.elements[i].type && "select-one" != form.elements[i].type && form.elements[i].value!=alSavedElements[i]) {
                              bChanged 
          = true;
                              
          break;
                          }

                          
          if("select-one" == form.elements[i].type && form.elements[i].selectedIndex!=alSavedElements[i]) {
                              bChanged 
          = true;
                              
          break;
                          }

                          
          if(("radio" == form.elements[i].type || "checkbox" == form.elements[i].type ) && form.elements[i].checked != alSavedElements[i]) {
                              bChanged 
          = true;
                              
          break;
                          }

                      }

                      
          return bChanged;
                  }

                  
                  
          /**
                   * 忽略form改變檢查
                   * 說明:該函數調用后即使form改變也不做離開頁面的提示
                   
          */

                  
          function ignoreFormCheck() {
                      bCheckForm 
          = false;
                  }

                  
                  
          /**
                   * 強制進行form改變檢查
                   * 說明:該函數調用后無論form是否改變都會提示form已改變,是否離開頁面
                   
          */

                  
          function forceFormCheck() {
                      bCheckForm 
          = true;
                  }

                  
                  
          /**
                   * 返回form的當前狀態
                   * 說明:用戶可以通過該狀態決定程序的流程走向
                   * @param form 所檢查的form對象
                   * @return ture form改變,true form沒改變
                   
          */

                  
          function getFormStatus(form) {
                     
          return isFormChanged(form); 
                  }





          囝濼,深圳康拓普信息技術有限公司
          您可以通過其博客了解更多信息和文章:http://www.bluenuo.cn

          posted on 2009-02-07 16:05 囝濼 閱讀(1833) 評論(0)  編輯  收藏 所屬分類: javascript


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 郸城县| 崇明县| 磐安县| 景东| 闵行区| 沈丘县| 潢川县| 边坝县| 兴文县| 万盛区| 长顺县| 拉萨市| 岫岩| 大冶市| 南投县| 宣恩县| 文化| 卢氏县| 金阳县| 汉寿县| 共和县| 万载县| 大渡口区| 珲春市| 西林县| 双流县| 锡林郭勒盟| 延安市| 仁布县| 长岭县| 怀仁县| 通辽市| 库尔勒市| 贡山| 鄯善县| 荥阳市| 武乡县| 毕节市| 蕲春县| 全南县| 航空|