【问题标题】:Div is not hidden after calling Page_ClientValidate调用 Page_ClientValidate 后,div 不隐藏
【发布时间】:2012-04-12 13:58:42
【问题描述】:

当调用 Page_ClientValidate 将 isValid 设置为 true 时,以下代码不会隐藏“信息”DIV 并显示“问题”DIV。如果我将 isValid 设置为 true 或 false,它会按预期工作。

为什么 Page_ClientValidate 会阻止隐藏/显示行为的发生?

function hide() {
        var isValid = Page_ClientValidate('validInfo');
        if (isValid) {
            if (!$('[id$=chkConfirm]').is(':checked'))
            { alert("Please confirm and agree with conditions"); }
            else {
                $('#info').hide();
                $('#questions').show();
            }
        }
    }    

这是 HTML - 我将其缩短为主要部分,DIVS 中只有一些 txtBoxes 和 radioLists:

 <div id="info">
    <asp:TextBox ID="tBoxTradingName" runat="server" Width="200"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="tBoxTradingName"
        ValidationGroup="validInfo">Required</asp:RequiredFieldValidator>
    <asp:CheckBox ID="chkConfirm" Text=" I confirm that the information provided above is accurate."
        runat="server" />
    <asp:Button ID="btnNext" Text="Next >>" runat="server" OnClientClick="hide()" Width="100"
        CausesValidation="true" ValidationGroup="validInfo" />
</div>
<div id="questions" style="display:none;">
    <div class="label">
        Do you trade as a
    </div>
    <asp:RadioButtonList ID="rBtnTradeAs" runat="server">
        <asp:ListItem>Sole Proprietor</asp:ListItem>
        <asp:ListItem>Company</asp:ListItem>
        <asp:ListItem>Closed Corporation</asp:ListItem>
        <asp:ListItem>Trust</asp:ListItem>
        <asp:ListItem>Other (please specify)</asp:ListItem>
    </asp:RadioButtonList>
    <asp:TextBox ID="txtBoxTradeAs" runat="server" Width="200"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator30" runat="server" ControlToValidate="rBtnTradeAs"
        ErrorMessage="Required">
    </asp:RequiredFieldValidator>
</div>

【问题讨论】:

  • 请同时添加 HTML 代码...
  • @TimSchmelter 是的,我有。它进入 else 部分,但 DIV 不会改变 - 页面只是滚动到顶部。
  • 我们也能看到一些html代码吗?
  • @EwaldStieger:当然可以,因为页面会被发送回服务器并重新创建,因此您的客户端更改会丢失。如果您仍然要回帖,您可以简单地在按钮(?)单击事件处理程序中切换服务器端的可见性。
  • 是在链接还是表单上调用?可能是因为您没有取消默认行为。

标签: javascript jquery asp.net validation


【解决方案1】:

您正在ButtonOnCLientClick 上调用客户端函数。如果Page_ClientValidate 返回true,那么您想通过javascript 更改某些控件的可见性。

问题是:如果没有验证器咬,按钮将导致回发。回发将导致页面在服务器端重新创建,因此每个客户端更改都会丢失。

所以要么

  • 不要回发(从OnCLientClick返回false会阻止回发)或
  • 更改服务器端控件的可见性(通过添加runat="server" to your divs)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 2014-02-01
    • 2012-06-15
    • 1970-01-01
    • 2011-10-08
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多