2012-04-12 70 views
0

下面的代码不会隐藏“info”DIV,并在Page_ClientValidate被调用时将“isValid”设置为true来显示“questions”DIV。如果我将isValid设置为true或false,则按预期工作。

Page_ClientValidate为什么阻止隐藏/显示行为发生?Div在调用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 - 我把它缩短到主要部件和只有一些txtBoxes和radioLists在DIVS:

<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> 
+0

你调试? – 2012-04-12 14:02:34

+0

请添加HTML代码以及... – 2012-04-12 14:05:40

+0

@TimSchmelter是的,它进入了其他部分,但DIV不会改变 - 页面只是滚动到顶部 – 2012-04-12 14:11:20

回答

1

你在Button调用客户方的功能“ s OnCLientClick。然后,如果Page_ClientValidate返回true,则希望通过javascript更改一些控件的可见性。

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

因此,无论

  • 不回传(返回从OnCLientClickfalse将阻止回发)控件或
  • 变化可视性服务器端(通过添加runat="server" to your divs)
+0

谢谢! OnClientClick =“hide(); return false;”解决了它。 – 2012-04-12 14:57:01