我在使用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是'foo,bar |'。
但是在提交表单后,我看到来自reexpand()的警告说'n ='。
有人看到我错过的东西吗?
答案 0 :(得分:0)
您尚未发布代码的Html部分。所以我有点困惑,但我认为你应该先放一些价值。
<input type="hidden" name="ECState" id="hdnECState" value="1" />
答案 1 :(得分:0)
Rudu在评论中提供了答案,但由于我无法将评论标记为答案,因此它是:
我忘记了隐藏的输入并不会在表单提交中自动保留ViewState中的值。我需要在页面加载中重新评估后端的隐藏输入,然后一切正常。