-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を展開すると、ecValueが'foo、bar|'であることを示すec()からのアラートが表示されます。

しかし、フォームを送信した後、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 に答える