在以下代码中,为什么ValidatorValidate(v)
验证页面上的所有RequiredFieldValidator
控件?它应该只执行RequiredFieldValidator1
而不是RequiredFieldValidator2
。
这是代码。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function check() {
var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
ValidatorValidate(v);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server"
ErrorMessage="RequiredFieldValidator" ControlToValidate="TextBox2"></asp:RequiredFieldValidator>
<br />
<asp:Button ID="Button1" runat="server" OnClientClick="check()" Text="Check" />
</div>
</form>
</body>
</html>
答案 0 :(得分:7)
你需要从check()返回一些东西,否则,它正在运行它,然后通过并进行正常的页面验证。
调用ValidatorValidate()后,您可以检查验证器是否有效
function check() {
var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
ValidatorValidate(v);
if (v.isvalid)
return true;
else
return false;
}
你也确实有一个额外的}。
您还需要为OnClientClick
投入回报<asp:Button ID="Button1" runat="server" OnClientClick="return check()" Text="Check" />
答案 1 :(得分:2)
这是因为一旦您单击Button,它就会在回发时验证所有这些按钮。您需要按ValidationGroup
对其进行分组,或使用return false;
中的check()
来停止回发。
或者,您也可以将RequiredFieldValidator
替换为CustomValidator
,并根据您的需要进行有条件检查。
如果您真的想要进行客户端验证器处理,请查看http://msdn.microsoft.com/en-us/library/yb52a4x0.aspx#ClientSideValidation_ClientValidationObjectModel
此页面包含客户端验证对象模型的详细信息,其中包含一些用于处理条件评估的JavaScript函数。查看Validation event for asp net client side validation,了解一个人在这些方面做了什么。
你有什么具体的做法?有人可能会帮助您获得正确的设置。
答案 2 :(得分:2)
script
格式不正确。
<head>
<script type="text/javascript">
function check() {
var v = document.getElementById("<%=RequiredFieldValidator1.ClientID%>");
ValidatorValidate(v);
}
</script>
</head>
在您的版本中,您收到的javascript错误是函数check
未定义。
第二个验证器也会被触发,因为Validator总是在回发之前被触发,而你的函数check
在提交按钮上被调用。即使没有在ValidatorValidate
上明确调用,两个验证器也会进行验证。
如果您不想回发onclick,请改为使用HtmlButton:
<input type="button" onclick="check()" value="Check" />