以下代码不会隐藏“info”DIV并在调用Page_ClientValidate时将“问题”DIV设置为将isValid设置为true。如果我将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中只有一些txtBox和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>
答案 0 :(得分:1)
您正在Button
OnCLientClick
上调用客户端功能。然后,如果Page_ClientValidate
返回true
,您希望通过javascript更改某些控件的可见性。
问题是:如果没有验证者咬人,该按钮将导致回发。回发将导致在服务器端重新创建页面,以便每个客户端更改都会丢失。
所以要么
false
返回OnCLientClick
会阻止回发)或runat="server" to your divs)