如果存在控件,Jquery验证插件会动态添加规则

时间:2013-07-01 15:06:40

标签: jquery-validate

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

编辑: Per @ 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>

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

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

2 个答案:

答案 0 :(得分:1)

当使用jQuery Validate插件或其任何方法时,如果您的选择器定位多个元素,插件将不会定位所有元素。

使用jQuery .each() method定位所有元素。

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

修改

如果您想避免使用.each(),请定位一个元素。

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

答案 1 :(得分:0)

根据documentation

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