我想运行任何客户端验证例程连接到特定的文本输入元素。
使用CustomValidator
:
<asp:textbox id="AddEstTime" runat="server" Width="55px"></asp:textbox><br />
<asp:CustomValidator ID="AddEstTimeCustomValidator" ClientValidationFunction="AddEstTimeCustomValidator_ClientValidate" OnServerValidate="AddEstTimeCustomValidator_ServerValidate" ErrorMessage="Please enter a time" ControlToValidate="AddEstTime" runat="server" Display="Dynamic" ValidateEmptyText="true"/>
<asp:CheckBox ID="AddIsTM" runat="server" Text="T&M" />
和javascript:
function AddEstTimeCustomValidator_ClientValidate(sender, args) {
var checkbox = $("input[id$='IsTM']");
args.IsValid = checkbox.is(":checked") || args.Value.match(/^\d+$/);
}
当CheckBox
“AddIsTM”状态发生变化时,我想使用其附加的textbox
“AddEstTimeCustomValidator”重新验证CustomValidator
“AddEstTime”。
我知道焦点 - &gt;添加字符重新聚焦 - &gt;删除字符。我想找到一个更正确的方法。 asp.net新手。
答案 0 :(得分:3)
在查看了Microsoft客户端代码后,我想出了这个似乎有效的方法:
// client-side validation of one user-control.
// pass in jquery object with the validation control
function ValidateOneElement(passedValidator) {
if (typeof (Page_Validators) == "undefined") {
return;
}
$.each(Page_Validators, function (index, value) {
if ($(value).attr("id") == passedValidator.attr("id")) {
ValidatorValidate(value, null, null);
}
});
}
这是在检查Page_ClientValidate
函数后:
function Page_ClientValidate(validationGroup) {
Page_InvalidControlToBeFocused = null;
if (typeof(Page_Validators) == "undefined") {
return true;
}
var i;
for (i = 0; i < Page_Validators.length; i++) {
ValidatorValidate(Page_Validators[i], validationGroup, null);
}
ValidatorUpdateIsValid();
ValidationSummaryOnSubmit(validationGroup);
Page_BlockSubmit = !Page_IsValid;
return Page_IsValid;
}
答案 1 :(得分:3)
thx sennett(已投票)
我刚刚运行了最简单的JS
Page_ClientValidate();
如果您有验证组,那么
Page_ClientValidate("validationGroupName")
答案 2 :(得分:1)
如果你想最终坚持使用ASP.NET验证器,你可以abuse Validation Groups,但我认为这种方法只能给你带来麻烦。其他选择是在客户端使用jQuery(nice list),然后你必须在服务器端重复验证,或者避免客户端验证中的调用服务器方法。