首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向动态创建的元素添加jQuery验证器规则

问向动态创建的元素添加jQuery验证器规则
EN

Stack Overflow用户
提问于 2012-02-22 07:31:03
回答 3查看 38K关注 0票数 28

我在一个MVC3项目的页面上动态插入了一些表单域。通常我们会在服务器端添加jQuery验证,但在这种情况下我们不能( UI中的多个字段生成一个隐藏字段的值-这就是提交的内容)。我们不能针对隐藏字段进行验证,因此必须为用户可以看到的字段添加仅限UI的验证。)

将字段动态添加到页面后,我在容器上运行以下代码:

代码语言:javascript
复制
$container.find(".date").rules("add", {
    required: true,
    messages: {
        required: "The date is required"
    }
});

但是它不起作用!奇怪的是,禁用上面的代码,创建动态元素,然后在浏览器JS控制台中运行代码,但只显示默认的验证消息。

我不知所措。有什么想法吗?

我使用的是jQuery Validation 1.9.0 &这个不起眼的插件

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-23 06:28:25

现在我明白了插件的不起眼的一面是怎么回事(我明白这与ASP.NET有某种关系),下面是你需要做的:

添加新元素后,调用$.validator.unobtrusive.parseElement(newElement),它将被添加到表单中。正如您的回答所建议的,您需要在新的表单元素中设置data-val和data-val-required属性。

所以你会得到这样的结果:

代码语言:javascript
复制
//create new form element
$('form fieldset').append('<br>New Field: '+
     '<input type="text" data-val="true" data-val-required="A date is required." name="newField">'+
     ' * Also required');

//add new rules to it
$.validator.unobtrusive
  .parseElement($('form').find('input[name="newField"]').get(0));

此处显示:http://jsfiddle.net/ryleyb/LNjtd/2/

票数 8
EN

Stack Overflow用户

发布于 2012-02-23 00:44:24

事实证明,这主要是在HTML中通过向每个表单元素添加一些属性来完成的:

attribute

  • data-val="true"

  • data-val-required="message"

  • A name

如下所示:

代码语言:javascript
复制
<input type='text' name="date" data-val="true" data-val-required="A date is required." />

然后只需要通过JS重新解析表单:

代码语言:javascript
复制
//Remove current form validation information
$("form")
    .removeData("validator")
    .removeData("unobtrusiveValidation");

//Parse the form again
$.validator
    .unobtrusive
    .parse("form");
票数 65
EN

Stack Overflow用户

发布于 2012-02-23 02:22:15

我认为你犯了一些更简单的错误--比如你的find('.date')实际上没有找到任何东西。因为不然的话,你的代码在我看来相当合理。下面是它按照您的预期工作的一个示例:http://jsfiddle.net/ryleyb/LNjtd/

我能够用下面的代码正确地验证代码:

代码语言:javascript
复制
$('form fieldset')
    .append('<br>New Field: <input type="text" name="newField"> * Also required')
    .find('input[name="newField"]').rules('add', {
      required: true,
      messages: {
        required: 'New field is required'
      }
    }
);​
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9386971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档