ASP CustomValidator无法检测到使用JQuery自动完成功能更改的文本

问题描述 投票:1回答:5

我编写了一个使用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并不有趣-因为未被调用。这就是我想要实现的。

asp.net jquery-ui validation autocomplete customvalidator
5个回答
2
投票

我找到了一种方法。在javascript中,我向要验证的元素添加了blur()函数,并使该函数触发Page_ClientValidate('validationGroupName')。对我来说是新功能。

$('.elementToValidate').blur(function () {
Page_ClientValidate('ValidationGrp1');
});

0
投票

这可能不是您想听到的,但我会尽可能避免将jQuery和ASP.net的Javascript混合使用-它们的播放效果通常不太好。

根据您的情况,我建议您转储ASP.net CustomValidator并切换到jQuery的Validate plugin。 jQuery UI可以更好地发挥它的作用。


0
投票

您还可以使用自动选择的select:处理程序来触发验证。

$(".someClass").autocomplete({
select: function(event, ui)
{
Page_ClientValidate(ui);
}
});

0
投票

我通过为文本框设置onBlur事件来完成此工作。

<asp:TextBox ID="TextBox1" runat="server" onBlur="Page_ClientValidate('ValidationGrp1');"></asp:TextBox>

(假设您的CustomValidator的ValidationGroup为'ValidationGrp1')


0
投票

我有一个不同的问题,我有两个不同的文本框,一个使用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>
© www.soinside.com 2019 - 2024. All rights reserved.