JavaScript和隐藏的输入

时间:2012-10-12 17:21:19

标签: 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是'foo,bar |'。

但是在提交表单后,我看到来自reexpand()的警告说'n ='。

有人看到我错过的东西吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

Rudu在评论中提供了答案,但由于我无法将评论标记为答案,因此它是:

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