因此,我将深入探讨为什么这种方法不起作用,因为我是那种在晚上不知道哈哈就无法入睡的人。我正在使用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();
};
此时,验证器将合并已设置的所有默认设置,并将其附加到表单验证器。当您查看正在执行验证,突出显示,取消突出显示等的代码时,它们都使用validator.settings对象来提取ignore属性。因此,我们需要确定是否要使用setDefaults方法设置忽略,然后必须在调用$(“ form”)。validate()之前进行忽略。
如果您使用的是Asp.net MVC和不引人注目的插件,那么在查看document.ready中调用validate的javascript之后,您将意识到。 我还在document.ready块中调用了setDefaults,它将在脚本,jquery验证且不引人注意之后执行,因为我已经在html中定义了这些脚本的脚本之前定义了这些脚本。因此,我的电话显然对验证期间跳过隐藏元素的默认功能没有影响。这里有两个选择。
选项1-正如胡安·梅拉多(Juan Mellado)所指出的那样,您可以将调用置于document.ready之外,该调用将在脚本加载后立即执行。我不确定这样做的时机,因为浏览器现在能够执行并行脚本加载。如果我只是过于谨慎,请纠正我。另外,可能有解决方法,但出于我的需要,我没有走这条路。
选项2a-我可以肯定的选择是$.validator.setDefaults({ ignore: '' });
,将document.ready事件的内部替换为$("form").data("validator").settings.ignore = "";
。当对给定表单的元素进行每次验证时,这将修改jQuery validate实际使用的ignore属性。
选项2b-在看了一些代码之后,您还可以将其$("form").validate().settings.ignore = "";
用作设置ignore属性的一种方式。原因是,在查看validate函数时,它检查以查看是否已通过该$.data()
函数为form元素存储了验证器对象。如果找到与form元素一起存储的验证器对象,则仅返回该验证器对象,而不创建另一个对象。