jQueryvalidation – 启用对隐藏字段的validation

在新版本的jQueryvalidation插件1.9中,默认情况下隐藏字段的validation被忽略 。 我正在使用CKEditor的textareainput字段,它隐藏了字段,并用iframereplace它。 该字段在那里,但validation禁用隐藏的字段。 随着validation插件版本1.8.1一切按预期工作。

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

此设置不起作用:

$.validator.setDefaults({ ignore: '' }); 

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

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

发布:validation插件1.9.0: “…另一个改变应该使隐藏元素的表单更容易设置,这些现在默认被忽略(选项”忽略“现在默认为”:hidden“)理论上,这可能会破坏现有的设置,但实际情况并非如此,可以通过将ignore-option设置为“[]”(不带引号的方括号)来修复它。

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

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

(不要求.setDefaults()document.ready函数内)

或者一个特定的forms:

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

编辑

看到这个答案如何启用一些隐藏的领域validation,但仍然忽略其他人。


编辑2

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

如果您正在使用unobtrusive-validation插件,请参阅此答案: https : //stackoverflow.com/a/11053251/594235

这对我来说,在一个ASP.NET MVC3网站,我离开框架设置不显眼的validation等,以防万一它是有用的任何人:

 $("form").data("validator").settings.ignore = ""; 

确保放置

  $.validator.setDefaults({ ignore: '' }); 

$(document).ready

所以我要深入一些,为什么这是行不通的,因为我是那种不知道哈哈,晚上睡不着的人。 我正在使用jQueryvalidation1.10和发布于2013年1月29日的Microsoft jQuery Unobtrusive Validation 2.0.20710.0。

我开始通过在jQuery Validate中searchsetDefaults方法,并在unminified文件的第261行find它。 所有这个函数真正做的就是将你的json设置合并到现有的$.validator.defaults ,它们被忽略属性设置为“:hidden”以及在jQuery Validate中定义的其他默认值。 所以在这一点上,我们忽略了忽略。 现在让我们看看这个默认属性在什么地方被引用。

当我通过代码追踪$.validator.defaults被引用。 我注意到,这只是被构造函数用于表单validation器,在jQuery中的第170行validation了未定义的文件。

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

此时validation器会合并已设置的任何默认设置并将其附加到表单validation器。 当你看看正在进行validation,高亮,不高亮等代码时,他们都使用validator.settings对象来拉取忽略属性。 所以我们需要确定是否要用setDefaults方法设置忽略,然后在$(“form”)。validate()被调用之前发生。

如果你正在使用Asp.net MVC和不显眼的插件,那么你会看到在document.ready中调用validation的javascript后,你会意识到。 我还在document.ready块中调用了我的setDefaults,这个块在脚本之后要执行,jqueryvalidation并且不显眼,因为我已经在html中定义了那些脚本,并且在那个脚本中调用了它。 所以我的调用显然不影响在validation过程中跳过隐藏元素的默认function。 这里有几个选项。

选项1 – 您可以像Juan Mellado指出的那样,在脚本加载完成后立即执行document.ready。 由于浏览器现在可以执行并行脚本加载,所以我不确定这个时间。 如果我只是过于谨慎,请纠正我。 此外,这可能有解决办法,但为了我的需要,我没有走这条路。

选项2a – 我眼中的安全赌注就是replace$.validator.setDefaults({ ignore: '' }); 在document.ready事件中使用$("form").data("validator").settings.ignore = ""; 。 这将修改jQueryvalidation的实际使用的忽略属性,对给定表单的元素进行每次validation。

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

刚添加ignore: []在具体表格的具体页面,这个解决scheme为我工作。

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

这在ASP.NET网站中适用于我。 要启用一些隐藏字段validation使用此代码

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

要validation所有的表单元素,使用这个$("form").data("validator").settings.ignore = "";

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

这是为我工作。

 jQuery("#form_name").validate().settings.ignore = ""; 

只需在jqueryvalidation文件中find文本ignore:“:hidden”并对其进行注释即可。 经过评论,这将永远不会丢失任何隐藏的元素来validation…

谢谢