【问题标题】:jQuery.validate is ignoring my rule declarationsjQuery.validate 忽略了我的规则声明
【发布时间】:2011-12-01 16:35:34
【问题描述】:

我有一个非常简单的联系表格,其中包含这样的字段:

<label>
    First Name<em>*</em>
    @Html.TextBox("txtFirstName", null, new { tabindex = "1"})
</label>

我希望这个字段是必需的,所以我添加了一些代码来准备文档:

$(function(){
    $("#contactForm").validate({
        rules: {
            txtFirstName: { required: true}
            /* also tried this */
            txtFirstName: "required"
        }
    });
});

但是,此时它不需要该字段。看起来很疯狂的是,如果我像这样添加“必需”类属性:

@Html.TextBox("txtFirstName", null, new { tabindex = "1", @class="required"})

它会验证,但我需要比仅仅需要更复杂的规则。我需要检查是否在选择列表中选择了某些选项,然后某些字段应该或不应该是必需的。

【问题讨论】:

  • 您的#contactForm 选择器是否正确?您是否在控制台中遇到任何错误,阻止验证插件连接到表单?
  • #contactForm 选择器是正确的。我知道,因为当我添加“必需”类属性时,它确实在不更改 javascript 的情况下进行验证。没有控制台错误,我的表单刚刚提交。
  • 您在表单中是否有另一个同名的字段?可能在标签中?

标签: c# jquery asp.net-mvc jquery-validate


【解决方案1】:

我怀疑您已将jquery.validate.unobtrusive.js 脚本添加到您的页面中。该脚本在表单上注册了自己的.validate 处理程序,这显然与您的冲突。 jquery.validate.unobtrusive.js 脚本用于当您有一个用数据注释修饰的视图模型来执行验证并且这些数据注释被转换为生成的输入字段上的 HTML5 data-* 属性时。然后,这些 HTML5 data-* 属性由jquery.validate.unobtrusive.js 脚本解释,该脚本在表单上注册了一个.validate 处理程序。

如果您想定义自己的验证规则并注册自定义 .validate 规则,您将必须手动进行(就像您所做的那样)并从此页面中删除内置不显眼验证脚本的任何痕迹。

当您在输入字段上添加class="required" 属性时验证起作用的原因是因为jquery.validate.unobtrusive.js 将其拾取并将其包含在它自己的规则中,当它通过注册.validate 方法来配置插件时表格。

【讨论】:

  • 你是个聪明人。我不记得包括不显眼的脚本,但它就在那里。删除它使一切开始按预期工作。
  • 优秀的答案。我花了半天时间来确定为什么在时间码之前尝试注册我的规则,给定表单已经存在一个规则集,它只是忽略了我的规则。对我来说可悲的是,即使我尝试删除所有可能与我的表单相关联的 DataAnnotations,我仍然无法使其正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多