我编写了一个使用ASP.NET CustomValidator来验证文本字段(客户端)输入的网页。文本字段使用JQuery UI自动完成功能-这就是我遇到问题的地方。
验证器工作正常。但是,如果验证失败并且用户收到错误消息,则用户将返回至文本字段并输入新值-从自动完成插件的下拉列表中进行选择。现在,当选择一个新值并且用户离开输入字段时,验证代码不会再次触发。我怀疑这是因为当值来自自动完成帮助程序时,由于某种原因,未检测到文本已更改。这有意义吗?
有人知道当用户从字段中移出焦点时,如何通过CustomValidator强制字段进行验证吗?
这里有CustomValidator:
<asp:CustomValidator EnableClientScript="True" runat="server" ControlToValidate="tbInput"
ID="inputCustomValidator" ClientValidationFunction="validateFunction" ErrorMessage="Not valid"
Display="Dynamic" ValidationGroup="ValidationGrp1" />
被调用的javascript并不有趣-因为未被调用。这就是我想要实现的。
我找到了一种方法。在javascript中,我向要验证的元素添加了blur()函数,并使该函数触发Page_ClientValidate('validationGroupName')。对我来说是新功能。
$('.elementToValidate').blur(function () {
Page_ClientValidate('ValidationGrp1');
});
这可能不是您想听到的,但我会尽可能避免将jQuery和ASP.net的Javascript混合使用-它们的播放效果通常不太好。
根据您的情况,我建议您转储ASP.net CustomValidator
并切换到jQuery的Validate plugin。 jQuery UI可以更好地发挥它的作用。
您还可以使用自动选择的select:处理程序来触发验证。
$(".someClass").autocomplete({
select: function(event, ui)
{
Page_ClientValidate(ui);
}
});
我通过为文本框设置onBlur事件来完成此工作。
<asp:TextBox ID="TextBox1" runat="server" onBlur="Page_ClientValidate('ValidationGrp1');"></asp:TextBox>
(假设您的CustomValidator的ValidationGroup为'ValidationGrp1')
我有一个不同的问题,我有两个不同的文本框,一个使用jQuery自动完成功能,另一个使用asp:validation。因此,当我将asp:validation添加到TextBoxProjectName时,SearchTxt的jquery自动完成失败,并且如果我从TextBoxProjectName中删除了验证,则jquery会完美触发SearchTxt
<div class="row m-4 ">
<div class="col-6 w-100">
<asp:Label ID="searchlabel" Text="Search " runat="server"></asp:Label>
<asp:TextBox ID="SearchTxt" runat="server" CssClass="form-control txtSearchProgram" Width="90%" AutoPostBack="true" Text=""></asp:TextBox>
</div>
<div class="col-1 w-100 mt-3" style="display: inline-block">
<asp:LinkButton ID="ShowAdd" runat="server" CausesValidation="true" Text="Add" CssClass="btn btn-main " OnClientClick=" return BtnSend_Click()" align="center"><i class="fas fa-plus"></i> Add</asp:LinkButton>
</div>
</div>
<div class="row m-4 " id="ShowOnClick" style="display: none">
<div class="col-4 w-100">
<asp:Label ID="LabelProjectName" Text="Add Project Name " runat="server"></asp:Label>
<asp:TextBox ID="TextBoxProjectName" runat="server" Text="" CssClass="form-control " Width="90%"></asp:TextBox>
<%-- <asp:RequiredFieldValidator ID="TextBoxProjectNameRequiredFieldValidator" runat="server" ControlToValidate="TextBoxProjectName" CssClass="invalid-feedback elementToValidate"
Display="Dynamic" ErrorMessage="Required" ValidationGroup="txt">Required</asp:RequiredFieldValidator>--%>
</div>
<div class="col-4 w-100">
<asp:Label ID="LabelProjectLink" Text="Add Project Link Use Format <span style='color:red'>*</span>(https://google.com)<span style='color:red'>*</span>" runat="server" Style="display: block"></asp:Label>
<asp:TextBox ID="TextBoxProjectLink" runat="server" CssClass="form-control" AutoPostBack="false" Width="90%" ></asp:TextBox>
</div>
<div class="col-4 w-100">
<asp:Label ID="LabelGroupName" Text="Add Group Name " runat="server"></asp:Label>
<asp:TextBox ID="TextBoxGroupName" runat="server" Text="" CssClass="form-control " Width="79%" Style="display: inline-block"></asp:TextBox>
<asp:LinkButton ID="AddButton" runat="server" ValidationGroup="txt" CausesValidation="true" Text="Add" CssClass="btn btn-main" OnClick="Add_NewProject" align="center"><i class="fas fa-save"></i> Save</asp:LinkButton>
</div>
<asp:RegularExpressionValidator
ID="RegularExpressionValidator1"
runat="server"
Display="Dynamic"
ForeColor="Red"
ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"
ControlToValidate="TextBoxProjectLink"
ErrorMessage="Input valid Internet URL!"
></asp:RegularExpressionValidator>--%>
<asp:ValidationSummary ID="UploadDocumentsValidationSummary" runat="server" ValidationGroup="txt"
ShowMessageBox="True" ShowSummary="False" />
</div>