我有一個問題設置/獲取一個隱藏的輸入值與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 ='。
有人看到我失蹤了嗎?
誰叫'ec()'?爲什麼這樣神祕的名字? –
表單字段中的狀態(即使隱藏)不會跨頁加載存儲。您應該使用Cookie或[localStorage](https://developer.mozilla.org/en-US/docs/XUL_School/Local_Storage)。如果該值是表單的一部分並被提交,則還需要將值重新插入(服務器端 - 使用PHP,ASP,PERL,SSI等) – Rudu
我沒有看到重置輸入字段的代碼狀態當頁面加載 –