【问题标题】:JQuery Validate: Validating a hidden form (possible bug)JQuery Validate:验证隐藏的表单(可能的错误)
【发布时间】:2012-01-21 02:12:56
【问题描述】:

我正在使用JQuery Validation plugin 处理表单验证。

我遇到的问题是,当表单被隐藏时,验证插件会忽略需要验证的字段并直接跳转到提交表单。

示例:http://jsfiddle.net/Qg5WQ/

我查看了插件的options 并用谷歌搜索了这个问题,但我找不到任何说明为什么隐藏表单中的字段被忽略的任何内容。

值得注意的是,如果页面上有两个表单,其中一个隐藏,一个显示,如果两个表单使用相同的验证方法,则两个表单都成功验证。但是,如果您调用两个单独的验证方法,那么隐藏表单中的字段仍然会被忽略。

使用相同的验证函数验证两个表单:http://jsfiddle.net/Qg5WQ/1/

使用不同的验证函数验证两个表单:http://jsfiddle.net/Qg5WQ/2/

有谁知道这是一个错误还是有验证隐藏表单的特定方法?

【问题讨论】:

  • 我也面临同样的问题,所以我正在编写自己的代码来验证表单。 (当我在 .aspx 网络表单中时)

标签: javascript jquery validation


【解决方案1】:

试试这个http://jsfiddle.net/Qg5WQ/3/

我在validate 调用中添加了ignore : hidden 选项。

$("form").validate({
  ignore: 'hidden',
  rules: {
    "first": "required"
  },
  invalidHandler: function() {
    alert("error");   
  },
  submitHandler: function( form ) {
    alert("no error");
  }
});

【讨论】:

  • 谢谢,这很奇怪。我似乎能够在忽略字段中添加任何内容并且它可以工作。我想这必须迫使它遍历字段,这让我认为这一定是一个错误。感谢您的帮助!
  • @MyHeadHurts - 是的,我注意到了,这很奇怪,但无论如何它都很好用=)
  • 请注意,这样做的原因是您缺少 :hidden 前面的冒号。您实际上是在告诉它忽略任何可能存在的 html 标签,而不是告诉它忽略隐藏类型的输入。
【解决方案2】:

如果您查看documentation page 上的ignore 选项,则默认值为:hidden。这显然意味着如果您没有明确指定ignore 选项,验证将忽略隐藏的输入。

只需定义ignore 选项(可以留空),它应该可以解决问题。

$("form").validate({
  ignore: '',
  rules: {"hidden_field": {required:true}}
});

【讨论】:

  • +1 - 谢谢,这解释了为什么添加任何东西到忽略仍然有效
猜你喜欢
  • 2018-06-21
  • 2015-09-22
  • 2016-07-17
  • 1970-01-01
相关资源
最近更新 更多