0

我正在动态添加一大堆 Jquery 验证规则。我收到错误消息,因为某些文本框是根据之前页面上的用户选择隐藏的,因此页面上不存在。如何在添加验证规则之前检查文本框是否存在?

以下是添加的验证规则:

 $('[id$="txtLastName"]').rules('add', {
    isSpecialChar: true,
    maxlength: 13,
    oneOrBothEntered: "txtFacility",
    messages: {
        oneOrBothEntered: "Either Provider Name or Facility Name must be entered"
    }
});
$('[id$="txtFirstName"]').rules('add', {
    isSpecialChar: true,
    maxlength: 11,
    conditionallyRequired: "txtLastName",
    messages: {
        conditionallyRequired: "This field is required."
    }
});

......还有更多。所以说 txtLastName 被隐藏了,这段代码就会中断。如何在添加规则之前先检查 txtlastname 是否存在?

编辑:根据@sparky 的评论,为字段添加 HTML:

 <div class="container1">
                    <span class="span150Padded">Last</span>
                    <asp:TextBox ID="txtLastName" runat="server" CssClass="textBoxMedium"></asp:TextBox>
                </div>
                <div class="container1">
                    <span class="span150Padded">First</span>
                    <asp:TextBox ID="txtFirstName" runat="server" CssClass="textBoxMedium"></asp:TextBox>
                </div>

我动态添加规则的原因是因为我正在使用母版页,所以我的字段被重命名。我不能使用 <%=textbox.ClientID%> 方法,因为我的验证是在一个单独的 js 文件中,该文件是从我的 aspx 页面引用和调用的,并且 js 文件不会重新识别类似的东西。经过很多来回,我发现最干净的解决方案是动态添加验证规则。

如果您对我有其他建议,请告诉我。

4

2 回答 2

1

使用 jQuery Validate 插件或其任何方法时,如果您的选择器针对多个元素,则该插件不会针对所有元素。

使用jQuery.each()方法来定位所有元素。

$('[id$="txtLastName"]').each(function() {
    $(this).rules('add', {
        ...
    });
});

编辑:

如果您想避免使用.each(),则以一个元素为目标。

$('#justOneField').rules('add', {
    ...
});
于 2013-07-01T16:15:56.443 回答
0

根据文档

$("#myform").validate({
ignore: ":hidden"
});
于 2014-02-06T14:59:51.797 回答