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

Jus*_*tin 62 jquery

我正在尝试动态地将验证规则添加到某些动态控件:

$("input[id*=Hours]").rules("add", "required");
Run Code Online (Sandbox Code Playgroud)

但是这行给了我以下错误:

$ .data(element.form,"validator")为null

使用validate函数定义规则静态方式可以正常工作.我究竟做错了什么?

谢谢,贾斯汀

Nic*_*ver 122

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

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

.validate()文件是一个很好的指南,这里的Blurb的约.rules("add", option):

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

  • 出于某种原因,即使使用基于类的广泛选择器,jQuery Validator似乎也只选择该类型的第一个元素.我花了很长时间想知道发生了什么,但最终放弃并做了类似于@Rick在不同答案中所做的事情.也就是说,类似于`$(".requiredGroup").each(function(){$(this).rules('add','required');});` (4认同)
  • 谢谢,调用validate首先解决了这个错误.然而,它只是验证第一个输入的ID为小时,而不是验证所有这些,任何想法为什么? (3认同)

Ric*_*ick 32

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

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

  • 消息呢?这是来自文档https://jqueryvalidation.org/rules/#example:-adds-minlength:-2-to-an-element-which-is-already-required的示例 (2认同)