问题是这样的,我用一个CheckBox控制一个TextBox的显示,选中则显示,不选中的则不显示。默认情况下是不显示的。当页面提交,页面Check,提交未成功,对提示信息点确定,返回页面后,所有的TextBox都不显示了,但是正确的页面是选中的Checkbox的对应的TextBox应该显示出来的。我觉得他是读取了默认的设置。请大侠赐教!
代码片段如下:
function CheckEvent(chkbox,hdn,txtbox,trMemoID,flg)
{
if(document.getElementById(chkbox).checked)
        {
            var hdnMark = document.getElementById(hdn).value;
            txtSumMark.value = parseInt(txtSumMark.value) + parseInt(hdnMark);
            objTxtbox.value = document.getElementById(hdn).value;
            
            //txtbox的下一个兄弟,注意这两个组件之间不能有空格或换行
            objTxtbox.nextSibling.value= document.getElementById(hdn).value;
            
            objTrMemo.style.display="block";
            
            
            objTxtMemo.select();
        }
        else
        {
            if(!pattern.exec(objTxtbox.value))
            {//取消时,如果不是数字,总和应该减去旧值
                txtSumMark.value = parseInt(txtSumMark.value) - parseInt(objTxtbox.nextSibling.value);
            }
            else
            {//是数字,总和减去新值
                txtSumMark.value = parseInt(txtSumMark.value) - parseInt(objTxtbox.value);
            }
            objTxtbox.value="";
            objTxtbox.nextSibling.value="";
            
            //取得备注textbox对象
            objTxtMemo.value="评分备注";
            
            objTrMemo.style.display="none";            
        }
}<tr>
<td style="width:80%">
     <asp:CheckBox ID="MinusItemCB" runat="server"  Checked="false"/>             <%# Container.ItemIndex + 1%>、
               asp:Label ID="MinusItemContent" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.DetailContent") %>'></asp:Label>&nbsp;
             <asp:HiddenField ID="MinusItemID" Value='<%# DataBinder.Eval(Container, "DataItem.ID") %>' runat="server" />
             <asp:HiddenField ID="MinusMark" Value='<%# DataBinder.Eval(Container, "DataItem.Mark") % >' runat="server" />
</td>
<td style="width:20%">
    <asp:TextBox ID="MinusFactMark" runat="server" Width="89%" Text=""></asp:TextBox><asp:HiddenField    ID="OldMinusFactMark" runat="server" Value="0"/>
</td>
</tr>
<tr id="trMinusMemo" runat="server" style="display:none">
    <td colspan="2">
    <asp:TextBox ID="txtMinusMemo" runat="server" TextMode="MultiLine" Rows="3" Width="90%" Text="评分备注"></asp:TextBox>
</td>
</tr>

解决方案 »

  1.   

    后退的话比较麻烦...提交改成ajax提交 这样就不存在后退问题了 ^_^
      

  2.   


    <div style="background-color:Gray">
            <table class="defaultTable">
                <tr>
                    <td height="12px" align="right">
                        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="javascript:ShowDiv();">显示/隐藏</asp:HyperLink>
                    </td>
                </tr>   
            </table>
            <div id="CL" style="display: block;">
            
                <uc1:CL ID="CL1" runat="server" />
            
                </div>
            </div> <script type="text/javascript">
        function ShowDiv() {
            var Layer_choice;        //选择div    
            if (document.getElementById) { //Netscape 6.x   
                Layer_choice = eval("document.getElementById('CL')");
            }
            else { // IE 5.x   
                Layer_choice = eval("document.all.choice.CL");
            }
            if (Layer_choice.style.display == 'block') {
                Layer_choice.style.display = 'none';
            }
            else {
            Layer_choice.style.display='block' 
            }
        }   
    </script>
      

  3.   

    补充说明:问题出现在页面提交后,再返回页面时,所有的TextBox都隐藏了。怎么做才能做到,页面返回后,该显示的还显示,不该显示的隐藏。是不是页面Load时写个处理?
      

  4.   

    在 window.onload 事件里面再根据你的 checkbox 状态去显示或隐藏 你的textbox 就OK了
      

  5.   

    感谢5楼和3楼的宝贵答案,问题已结局。
    我的方法有点笨,就是写了个showTextbox(),
    在数据绑定完,就再执行一遍这个函数。PageLoad函数了也调用。
    后来照着5楼的改进了一下。