Sam*_*Sam 12 javascript c# asp.net validation
我有一种感觉,这可能是一个非常简单的问题,但不能为我的生活弄明白.
我有一个asp:文本框.我有一个自定义验证器,其上有客户端和服务器端验证.
这是代码:
<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
<asp:CustomValidator ID="vldFirstName" runat="server" ControlToValidate="txtFirstName"
ClientValidationFunction="ValidateName" OnServerValidate="vldFirstName_ServerValidate"
Text="Please put in your first name" ErrorMessage="First name missing"
ForeColor="Red" font-bold="true" Display="Dynamic"
ValidateEmptyText="true">
</asp:CustomValidator>
Run Code Online (Sandbox Code Playgroud)
这将在服务器端正确验证,如果我直接进入我的页面并单击提交,将文本框留空.
但是有了客户端验证.如果我进入盒子直接走出它而不输入任何东西.javascript验证不会触发.如果我然后输入内容.请保留该框.返回然后清除验证工作框.它回来说它是空的.
但是我希望它一进入方框就让它进行验证.我不知道为什么验证器没有触发,如果文本框没有被触及.
将下面的脚本放在网络表单中的任何位置,它将按照您想要的方式工作:
document.addEventListener('DOMContentLoaded', function() {
[].forEach.call(document.querySelectorAll('input'), function(el, i) {
el.addEventListener('blur', ValidatorOnChange);
});
});
Run Code Online (Sandbox Code Playgroud)
验证器本身并不按照您想要的方式工作,因为它将onchange事件处理程序附加到文本框,因此,如果您根本不更改文本,则不会获得验证。
但是如果你强制所有的 TextBox 触发相同的事件onblur,那么,无论你是否更改了文本,它都会触发验证,这就是上面的脚本所做的:将该事件处理程序添加到页面,并ValidatorOnChange在发生时调用该函数。
注意:如果您已经有任何脚本被调用到应用程序中的每个 WebForm,并且您希望此行为在任何地方都有效,则可以将代码添加到该脚本中(其中的任何位置),并且解决方案将传播到所有您的网络表单。