2012-10-12 106 views
0

我有一個問題設置/獲取一個隱藏的輸入值與JavaScript,並不能看到我做錯了什麼。JavaScript和隱藏輸入

我基本上試圖做的是在頁面上通過表單提交維護可展開/可摺疊div的狀態。所以我在頁面上放置了一個隱藏的輸入來保存div的狀態。當div展開/摺疊時,我改變了輸入的值。當頁面加載時,我讀取輸入的值並設置div的狀態。

但是輸入的價值正在喪失。我通過警報驗證它是否正確設置,然後當我在加載時讀取它時,我會驗證它是否爲空。下面是相關代碼:

<input type="hidden" name="ECState" id="hdnECState" /> 

<script language="javascript" type="text/javascript"> 
<!-- 
    var ecValue; 

    function ec(div, btn) { 
     //expands or collapses an error detail div 
     var e = document.getElementById(div); 
     var b = document.getElementById(btn); 
     var ecStr = div.toString() + ',' + btn.toString() + '|' 
     if (e.style.display == 'block') { 
      e.style.display = 'none'; 
      b.src = '../../Images/plus.gif'; 
      ecValue = ecValue.replace(ecStr, ''); 
     } 
     else { 
      e.style.display = 'block'; 
      b.src = '../../Images/minus.gif'; 
      ecValue = ecValue + ecStr; 
     } 
     alert(ecValue); 
     document.getElementById('hdnECState').value = ecValue; 
    } 
    function reexpand() { 
     //restores the expanded state of the error detail divs 
     var pipe, comma, db, div, btn, e, b; 
     var n = document.getElementById('hdnECState').value; 
     alert('n=' + n); 
     if (n != '') { 
      pipe = n.indexOf('|'); 
      while (pipe > 0) { 
       db = n.substring(0, pipe); 
       comma = db.indexOf(','); 
       if (comma > 0) { 
        div = db.substring(0, comma); 
        btn = db.substring(comma + 1); 
        e = document.getElementById(div); 
        b = document.getElementById(btn); 
        e.style.display = 'block'; 
        b.src = '../../Images/minus.gif'; 
       } 
       n = n.substring(pipe+1); 
       pipe = n.indexOf('|'); 
      } 
     } 
    } 

    reexpand(); 

//--> 
</script> 

當我展開一個div,我看到EC(警報),這表明ecValue是「富,酒吧|」。

但提交表單後,我看到來自reexpand()的警告,說'n ='。

有人看到我失蹤了嗎?

+0

誰叫'ec()'?爲什麼這樣神祕的名字? –

+2

表單字段中的狀態(即使隱藏)不會跨頁加載存儲。您應該使用Cookie或[localStorage](https://developer.mozilla.org/en-US/docs/XUL_School/Local_Storage)。如果該值是表單的一部分並被提交,則還需要將值重新插入(服務器端 - 使用PHP,ASP,PERL,SSI等) – Rudu

+0

我沒有看到重置輸入字段的代碼狀態當頁面加載 –

回答

0

Rudu提供一個評論的答案,但因爲我不能標記爲答案註釋,那就是:

我忘隱藏的投入不會自動保持自己的價值ViewState跨表單提交。我需要重新評估頁面加載後端的隱藏輸入,然後一切正常。

0

您尚未發佈Html代碼部分。所以我有點困惑,但我認爲你應該首先考慮一些價值。

<input type="hidden" name="ECState" id="hdnECState" value="1" />