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=」というアラートが表示されます。
誰かが私が欠けているものを見ますか?