ASP.NET Web窗体-通过jquery填充字段时客户端验证不起作用
ASP.NET Web Forms - Client side validation not working when field populated via jquery?
我有以下ASP.Net WebForm,其中Address
字段是必填字段。Address
字段通过jQuery填充Location
字段的值。
当我在没有填写任何字段的情况下单击提交时,客户端验证将启动,我们将在Address
控件下方显示错误消息。
如果我现在在Location
字段中输入一个值,jQuery将触发,Address
字段将填充一个值但上一条错误消息没有清除-只有当我手动输入值时才会清除?
<div>
<label>Location</label>
<asp:TextBox ID="Location" runat="server" CssClass="form-control" ClientIDMode="Static" placeholder="Enter location"></asp:TextBox>
</div>
<div>
<label >Address</label>
<asp:TextBox ID="Address" runat="server" CssClass="form-control" ClientIDMode="Static" placeholder="Enter the address"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ErrorMessage="Address is Required" Display="Dynamic" ControlToValidate="Address" CssClass="field-validation-error" EnableClientScript="True"></asp:RequiredFieldValidator>
</div>
<asp:Button ID="Submit" runat="server" Text="Save" OnClick="btnSubmit_Click" CssClass="btn btn-primary" />
<script>
$("#Location").on('change', function (e) {
var location = $("#Location").val();
$("#Address").val(location);
});
</script>
我该如何解决这个问题,以便如果客户端错误显示在控件下面,那么如果验证逻辑通过jquery填充完毕,它就会清除错误消息,就像上面的例子一样?
在Address
输入中手动输入值时,当输入失去焦点或按下回车键时,change
事件会被触发。使用jQuery val()
方法时不会发生这种情况。
要使其工作,您有两个选项,手动触发change
事件:
选项1:jQuery解决方案触发更改事件
$("#Location").on('change', function (e) {
var location = $("#Location").val();
$("#Address").val(location).trigger("change");
});
或者,您可以手动直接调用Webforms验证方法。这有点冒险,因为不能保证这些方法在未来不会改变,但为了完整性,我将其包含在内,因为它在某些情况下可能有用。
选项2:调用Webforms验证方法以触发重新验证
$("#Location").on('change', function (e) {
var location = $("#Location").val();
$("#Address").val(location);
if (typeof (Page_ClientValidate) == 'function') {
Page_ClientValidate();
}
});
我在这里选择了Page_ClientValidate
方法,它将重新验证给定验证组的所有验证器(此处未提供验证组,因为它不适用(。这是一种更简单、更安全的调用方法,在更复杂的场景中,您可能需要ValidatorValidate()
或WebUIValidation.js中的其他方法之一。我很乐意详细介绍,但我认为这超出了问题的范围。
我更喜欢选项1,因为它更简单,将来不太可能被Webforms的更改所破坏。希望能有所帮助。
$("#Location").on('change', function (e) {
var location = $("#Location").val();
$("#Address").val(location);
$("#Form id").data('validator').resetForm();
});
试试这个,它会工作
- 如何在客户端填写PDF字段(Javascript)
- 套接字io客户端网络::ERR_CONNECTION_REFUSED
- 如何在 Web 客户端上扩展基本字段小部件
- 无法访问字段'通过aspx页面上的javascript函数传递来自代码隐藏中函数调用的客户端id的s值(页面加载
- AngularJS客户端验证:根据其他字段更改验证要求
- 如何在客户端通过多个字段对java对象进行排序
- 客户端处理相同输入字段的多个副本的最佳实践
- Braintree javascript 客户端 - 拆解调用不会删除现有的集成 - 在我的托管字段上获取错误
- 将值分配给页面客户端脚本中的已注册隐藏字段
- 在客户端使用 javascript、ajax 或 php 计算填充字段的数量
- 为什么没有从客户端设置asp隐藏字段
- 用户离开字段后立即显示AngularJS引导工具提示以进行客户端验证
- 支持套接字的客户端浏览器语言/插件
- 文本字段客户端验证
- 套接字.在客户端为该事件设置侦听器之前,服务器发出事件
- 套接字.当客户端Internet关闭时
- 套接字Io:客户端'connect'套接字已设置时未激发事件
- 套接字.IO客户端无法与服务器通信
- 使用套接字.io与iOS通过套接字.Swift客户端
- 套接字.从客户端获得两个响应,然后运行代码