Jquery验证插件在控件存在的情况下动态添加规则



我正在动态添加一大堆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>

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

如果你有其他建议给我,请告诉我。

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

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

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

编辑:

如果要避免使用.each(),请将one元素作为目标。

$('#justOneField').rules('add', {
    ...
});

根据文档

$("#myform").validate({
ignore: ":hidden"
});

最新更新