-1

我在使用 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 ='。

有人看到我错过了什么吗?

4

2 回答 2

0

您尚未发布代码的 Html 部分。所以我有点困惑,但我认为你应该先放一些价值。

<input type="hidden" name="ECState" id="hdnECState" value="1" />
于 2012-10-12T17:30:58.740 回答
0

Rudu 在评论中提供了答案,但由于我无法将评论标记为答案,所以这里是:

我忘记了隐藏的输入不会在表单提交时自动将其值保留在 ViewState 中。我需要在页面加载时重新评估后端隐藏的输入,然后一切正常。

于 2012-10-18T13:25:30.803 回答