JQuery-如何动态添加验证规则

我试图动态地向一些动态控件添加验证规则:

$("input[id*=Hours]").rules("add", "required");

然而,这一行给我带来了以下错误:

$. data (element.form,“ validator”)为空

使用验证函数以静态的方式定义规则可以很好地工作。我做错了什么?

谢谢, 贾斯汀

173474 次浏览

在以这种方式添加规则之前,您需要调用 .validate(),如下所示:

$("#myForm").validate(); //sets up the validator
$("input[id*=Hours]").rules("add", "required");

.validate()文档是一个很好的指南,下面是关于 .rules("add", option)的介绍:

添加指定的规则并返回第一个匹配元素的所有规则。要求验证父窗体,即首先调用 $("form").validate()

除了确保首先调用了 $("#myForm").validate();之外,还要确保在添加验证规则之前已经将动态控件添加到 DOM 中。

要验证所有动态生成的元素,可以为每个元素添加一个特殊的类,并使用每个()函数,比如

$("#DivIdContainer .classToValidate").each(function () {
$(this).rules('add', {
required: true
});
});

如果您希望 jquery 验证来自动选择动态添加的项目的验证,您可以简单地删除并添加整个表单的验证,如下所示

//remove validations on entire form
$("#yourFormId")
.removeData("validator")
.removeData("unobtrusiveValidation");


//Simply add it again
$.validator
.unobtrusive
.parse("#yourFormId");