<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Studying Java......

    統計

    留言簿(1)

    積分與排名

    JavaServerFaces

    Mail Link

    Open Source

    友情鏈接

    收藏的鏈接

    閱讀排行榜

    評論排行榜

    2005年12月8日 #

    不刷新頁面,切換表格的編輯狀態

          前段時間做了一個簡單的維護界面,包括添加,變更與刪除的功能.變更界面是在頁面中顯示一個TABLE(第一列為RadioButton),選中一行后該行變成可編輯狀態,切換到其它行后再恢復成文本顯示.最初做的時候是點擊單選項按鈕后提交到后臺刷新頁面來實現的,后來要求改成在客戶端切換編輯狀態.


    1.首先需要解決的是由文本顯示狀態與TEXT框轉換的問題.由文本顯示到編輯框這個可以通過修改對應對象的innerHTML來解決,由編輯框切換到文本顯示開始用的是outerHTML來修改的(后來發現有問題).


    2.行切換的問題:當選擇的行做了變換時,如果數據做了更改且未提交的話仍顯示未修改前的值.這個在頁面中加入了一個隱藏域,保存選中行的數據.這部分數據只是用來臨時保存數據的,不需要提交到后臺,未包含在FORM中,只是給了一個ID進行區分;


    3.選中的行并不是所有字段都更改為可編輯狀態,只有部分字段需要更改.這里在修改innerHTML的時候進行了判斷;


    4.如何與FORM中的屬性匹配的問題:可以在修改innerHTML的時候指定name就可以了;


    5.后來在接下來的測試中,如果字段中存在HTML字符,通過outerHTML來賦值,瀏覽器會對它進行解析,并不是想要顯示的信息.開始查JS函數的時候發現了escape與 unescape,以為會進行自動轉換的,后來發現并非如此.在經過幾番修改之后,發現修改outerText屬性則不會對賦的值進行解析.


    6.由于一些驗證是定義在后臺的,只有提交到服務器后才會進行校驗.如果檢驗不通過還返回當前頁面,要保留提交前的狀態;這里是給RadioButton一個ID(后臺數據表中的主鍵值).找到對應的行,再把把它置成選中狀態,同時相應的列改為編輯框;


    7.應該說到這里基本已經完成了,但在提交到服務器校驗出錯后,返回的頁面中顯示的仍然是編輯前的值,由于頁面做了刷新,隱藏域的值已經被重置.如果再切換到其它行,顯示的仍然是用戶修改后的數據,這部分數據并未成功更新到后臺,應該顯示成修改前的數據.這里通過Request傳回到頁面中,在觸發對應的RadioButton后再把值賦到隱藏域中.

    部分代碼如下:

    <script language="JavaScript" type="text/javascript">
    //Get parent node.
    window.SearchByTagName = function(e, TAG) {
        while(e!=null && e.tagName){
         if(e.tagName==TAG.toUpperCase()) {
          return(e);
         } 
         e = e.parentNode;
        }
        return null;
    }

    var selectedRow = -1; //global

    function selectChanged(e) {
        var td = SearchByTagName(e, "TD");
        var tr = td.parentNode;
        var tab = SearchByTagName(tr, "TABLE");
        var cellValue = "";
        //Reset the cell's value.
        if(selectedRow>=0) {
         for(var i=td.cellIndex+1; i<tab.rows[selectedRow].cells.length; i++) {
                var a = tab.rows[selectedRow].cells[i].getElementsByTagName("INPUT");
                for(var k=0; k<a.length; k++) {
                    if(a[k].type=="text") {
                     //Valid only in IE.
                     a[k].outerText = document.getElementById(a[k].name).value;
                    }
                }
            }
        } 
      
        selectedRow = tr.rowIndex;
     
     //Change the cell into text,and save the value into hidden field.
        var hyoujijunCell = document.getElementById("hyoujijun" + selectedRow);
        var ryakusyouCell = document.getElementById("ryakusyou" + selectedRow);
        var nameCell = document.getElementById("name" + selectedRow);
        
        document.getElementById("hyoujijun").value=rtrim(hyoujijunCell.innerText);
        document.getElementById("hyoujijun" + selectedRow).innerHTML =
         "<input type='text' name='hyoujijun' maxlength='3' style='width:80px' value='" +
          rtrim(hyoujijunCell.innerHTML) +"'>";
        
         document.getElementById("ryakusyou").value=rtrim(ryakusyouCell.innerText);
         document.getElementById("ryakusyou" + selectedRow).innerHTML =
          "<input type='text' name='ryakusyou' maxlength='4' style='width:60px' value='" +
          rtrim(ryakusyouCell.innerHTML) +"'>";
       
        document.getElementById("name").value= rtrim(nameCell.innerText);
        document.getElementById("name" + selectedRow).innerHTML =
         "<input name='name' maxlength='100' style='width:300px' value='" +
         rtrim(nameCell.innerHTML) +"'>";
    }

    function validReturn() {
     if ( <%=selectedMasterID%> > 0) {
      //Get the selected row,and select it.
      var radioSn = document.getElementById("masterid<%=selectedMasterID%>");
      radioSn.click( );
      //Save original value.If changed other row,restore data as before modified.
      document.getElementById("hyoujijun").value = "<%=hyoujijunReturn%>";
      document.getElementById("name").value = "<%=nameReturn%>";
      document.getElementById("ryakusyou").value = "<%=ryakusyouReturn%>";
     }
    }

    //Clear the last blank.
    function rtrim(cellValue) {
     if (cellValue.lastIndexOf(" ") >= 0) {
      cellValue = cellValue.substr(0,cellValue.lastIndexOf(" "));
     }
     
     return cellValue; 
    }
    </script>


    <body class="gyomu" onload="validReturn()">
    <table>
      <logic:present name="masterList">
       <logic:iterate id="element" indexId="index" name="masterList">
        <tr>
         <td class="meisai" style="width: 50px">
          <logic:notEqual name="element" property="sakujyo" value="DELETE">
           <input type="radio" name="masterid"
            value="<bean:write name='element' property='masterid'/>"
            onclick="selectChanged(this)" id="masterid<bean:write name='element' property='masterid'/>" />
           <%rowCount++;%>  
          </logic:notEqual>
         </td>
         <td class="meisai" style="width: 80px" id="hyoujijun<%=index%>">
          <bean:write name="element" property="hyoujijun" />
         </td>
         <td class="meisai" style="width: 60px" id="cd<%=index%>">
          <bean:write name="element" property="cd" />
         </td>
         <td class="meisai" style="width: 300px" id="name<%=index%>">
          <bean:write name="element" property="name" />
         </td>
         <logic:equal name="needShortName" value="true">
          <td class="meisai" style="width: 60px" id="ryakusyou<%=index%>">
           <bean:write name="element" property="ryakusyou" />
          </td>
         </logic:equal>
         <td class="meisai" style="width: 70px" id="sakujyo<%=index%>">
          <bean:write name="element" property="sakujyo" />
         </td>
        </tr>
       </logic:iterate>
      </logic:present>
     </table>
    </body>

    posted @ 2005-12-08 11:46 Terence 閱讀(2345) | 評論 (2)編輯 收藏

    主站蜘蛛池模板: 美女视频免费看一区二区| 亚洲国产精品成人综合久久久| 亚洲成AV人片在WWW| 国产精品美女午夜爽爽爽免费| 亚洲成人免费在线观看| 美丽的姑娘免费观看在线播放| 亚洲视频在线观看不卡| 亚洲网站免费观看| 中文字幕在线观看亚洲视频| 最近免费中文字幕4| 亚洲av日韩综合一区久热| 午夜国产羞羞视频免费网站| 激情无码亚洲一区二区三区| 亚洲日本在线观看视频| 野花香在线视频免费观看大全 | 国产精品免费无遮挡无码永久视频| 亚洲精品无码国产| 99久久国产免费中文无字幕| 91亚洲自偷在线观看国产馆| 四虎成人免费网站在线| 国产亚洲精品国产福利在线观看| 中文字幕亚洲电影| 91香蕉国产线观看免费全集| 亚洲香蕉久久一区二区| 又粗又硬免费毛片| 女人隐私秘视频黄www免费| 亚洲精品mv在线观看| 免费毛片网站在线观看| 72pao国产成视频永久免费| 亚洲国产精品一区二区久久| 成年女人午夜毛片免费视频| h在线看免费视频网站男男| 久久久久亚洲AV片无码| 女人18毛片免费观看| 黄色视屏在线免费播放| 亚洲日本视频在线观看| 免费国产小视频在线观看| 日韩精品内射视频免费观看| 亚洲精品无码成人| 亚洲AV无码乱码在线观看裸奔| 成人毛片免费观看视频在线|