jQuery Validate - 启用隐藏字段的验证

Sha*_*man 182 jquery-validate

在新版本的jQuery验证插件1.9中默认验证隐藏字段被忽略.我正在使用CKEditor进行textarea输入字段,它隐藏了字段并将其替换为iframe.该字段在那里,但是对隐藏字段禁用了验证.使用验证插件版本1.8.1,一切都按预期工作.

所以我的问题是如何使用v1.9验证插件启用隐藏字段的验证.

此设置不起作用:

$.validator.setDefaults({ ignore: '' });
Run Code Online (Sandbox Code Playgroud)

Spa*_*rky 316

该插件的作者说你应该使用"没有引号的方括号",[]

http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

发布:验证插件1.9.0: "......另一个更改应该使隐藏元素的表单设置更容易,默认情况下现在忽略它们(选项"忽略"现在默认为":hidden").理论上,这可能会破坏现有的设置.在实际情况不太可能的情况下,你可以通过将ignore-option设置为"[]"(没有引号的方括号)来修复它.

要为所有表单更改此设置:

$.validator.setDefaults({ 
    ignore: [],
    // any other default options and/or rules
});
Run Code Online (Sandbox Code Playgroud)

(不要求.setDefaults()document.ready功能范围内)

或针对一种特定形式:

$(document).ready(function() {

    $('#myform').validate({
        ignore: [],
        // any other options and/or rules
    });

});
Run Code Online (Sandbox Code Playgroud)

编辑:

请参阅此答案,了解如何在某些隐藏字段上启用验证但仍忽略其他字段.


编辑2:

在留下评论"这不起作用"之前,请记住OP只是询问jQuery Validate插件,他的问题与ASP.NET,MVC或任何其他Microsoft框架如何改变此插件的正常无关预期的行为.如果您使用的是Microsoft框架,那么jQuery Validate插件的默认功能将被Microsoft的unobtrusive-validation插件覆盖.

如果您正在努力使用该unobtrusive-validation插件,请转而参考此答案:https: //stackoverflow.com/a/11053251/594235

  • 也许下选者可以给我一些建设性的反馈.否则,答案是完全自包含的,适当的源代码,提供代码示例,并且根据插件的作者在技术上是正确的. (25认同)
  • 好吧@Sparky说.向下投票可能是一种复仇,我遇到过同样的情况...... (4认同)

Jam*_*com 70

这对我有用,在一个ASP.NET MVC3站点中,我离开框架设置不显眼的验证等,以防它对任何人都有用:

$("form").data("validator").settings.ignore = "";
Run Code Online (Sandbox Code Playgroud)

  • 我不得不这样做,因为使用.validate()来更改选项是行不通的. (5认同)
  • 我也喜欢这个,因为这意味着我可以在某些情况下这样做,而不是改变默认行为. (2认同)

小智 64

一定要放

 $.validator.setDefaults({ ignore: '' });
Run Code Online (Sandbox Code Playgroud)

不在里面$(document).ready

  • @KevinZych,显然,将`$ .validator.setDefaults()`放在DOM就绪处理器的内部或外部是完全没有区别的.将[this jsFiddle](http://jsfiddle.net/uPbmZ/)与[this jsFiddle](http://jsfiddle.net/uPbmZ/1/)进行比较. (3认同)
  • 很好的答案.文档的链接有利于人们学习,但直接的答案更有价值.他的OP是在正确的轨道上,但把它放在$(文件).ready之外就是诀窍. (2认同)

Jus*_*els 28

所以我会更深入地了解为什么这不起作用,因为我是那种在不知道哈哈的情况下晚上无法入睡的人.我正在使用jQuery validate 1.10和Microsoft jQuery Unobtrusive Validation 2.0.20710.0,它发布于2013年1月29日.

我开始在jQuery Validate中搜索setDefaults方法,并在未分解文件的第261行找到它.所有这个函数确实将你的json设置合并到现有的中$.validator.defaults,这些设置是使用ignore属性设置为":hidden"以及jQuery Validate中定义的其他默认值初始化的.所以在这一点上我们已经忽略了.现在让我们看看这个默认属性的引用位置.

当我遍历代码以查看$.validator.defaults引用的位置时.我注意到构造函数只使用了表单验证器,jQuery中的第170行验证了未编译的文件.

// constructor for validator
$.validator = function( options, form ) {
    this.settings = $.extend( true, {}, $.validator.defaults, options );
    this.currentForm = form;
    this.init();
};
Run Code Online (Sandbox Code Playgroud)

此时,验证器将合并已设置的任何默认设置并将其附加到表单验证器.当您查看正在进行验证,突出显示,取消突出显示等的代码时,它们都使用validator.settings对象来提取ignore属性.因此,我们需要确保是否要使用setDefaults方法设置ignore,然后必须在$("form").validate()被调用之前发生.

如果您正在使用Asp.net MVC和不引人注目的插件,那么您将在查看在document.ready中调用validate的javascript后意识到. 我还在document.ready块中调用了我的setDefaults,它将在脚本之后执行,jquery验证并且不引人注意,因为我已经在html中定义了这些脚本,然后才调用它.因此,我的调用显然对验证期间跳过隐藏元素的默认功能没有影响.这里有几个选择.

选项1 - 你可以像胡安·梅拉多所指出的那样在文档之外进行调用.已经在脚本加载后立即执行.我不确定这个时间,因为浏览器现在能够进行并行脚本加载.如果我只是过于谨慎,请纠正我.此外,有可能解决这个问题,但根据我的需要,我没有走这条路.

选项2a - 我眼中的安全赌注就是用$.validator.setDefaults({ ignore: '' });文件替换document.ready事件的内部$("form").data("validator").settings.ignore = "";.这将修改在对给定表单的元素进行每次验证时jQuery验证实际使用的ignore属性.

选项2b - 在查看代码之后,您还可以使用它$("form").validate().settings.ignore = "";作为设置ignore属性的方法.原因是当查看validate函数时,它会检查是否已经通过$.data()函数为表单元素存储了验证器对象.如果它找到与表单元素一起存储的验证器对象,那么它只返回验证器对象而不是创建另一个验证器对象.


ang*_*ili 13

这在ASP.NET站点中对我有用.要在某些隐藏字段上启用验证,请使用此代码

$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";

要为表单的所有元素启用验证,请使用此表单 $("form").data("validator").settings.ignore = "";

请注意,在其中使用它们 $(document).ready(function() { })


Kir*_*ran 8

刚刚添加ignore: []到特定表单的特定页面中,此解决方案对我有用.

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });
Run Code Online (Sandbox Code Playgroud)