在新版本的jQuery验证插件1.9中,默认情况下忽略隐藏字段的验证 。 我将CKEditor用于textarea输入字段,它隐藏了该字段并将其替换为iframe。 该字段在那里,但是对隐藏字段禁用验证。 使用验证插件1.8.1版时,所有功能均按预期工作。
所以我的问题是如何使用v1.9验证插件启用隐藏字段的验证。
此设置无效:
$.validator.setDefaults({ ignore: '' });
在新版本的jQuery验证插件1.9中,默认情况下忽略隐藏字段的验证 。 我将CKEditor用于textarea输入字段,它隐藏了该字段并将其替换为iframe。 该字段在那里,但是对隐藏字段禁用验证。 使用验证插件1.8.1版时,所有功能均按预期工作。
所以我的问题是如何使用v1.9验证插件启用隐藏字段的验证。
此设置无效:
$.validator.setDefaults({ ignore: '' });
该插件的作者说,您应该使用“不带引号的方括号” , []
http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/
发布:Validation Plugin 1.9.0: “ ...另一项更改应使带有隐藏元素的表单的设置更加容易,默认情况下这些元素现在将被忽略(选项“ ignore”现在默认为“:hidden”)。可能会破坏现有的设置。在不太可能的情况下,您可以通过将ignore-option设置为“ []”(不带引号的方括号)来修复它。
要为所有表格更改此设置:
$.validator.setDefaults({
ignore: [],
// any other default options and/or rules
});
(不需要.setDefaults()
在document.ready
函数中)
或针对一种特定形式:
$(document).ready(function() {
$('#myform').validate({
ignore: [],
// any other options and/or rules
});
});
编辑 :
有关如何在某些隐藏字段上启用验证但仍忽略其他字段的信息,请参见此答案 。
编辑2 :
在留下“这不起作用”的评论之前,请记住,OP只是在询问jQuery Validate插件,而他的问题与ASP.NET,MVC或任何其他Microsoft框架如何改变此插件的正常状态无关。预期的行为。 如果您使用的是Microsoft框架,则jQuery Validate插件的默认功能会被Microsoft的unobtrusive-validation
插件覆盖。
如果您正在努力使用unobtrusive-validation
插件,请改用以下答案: https : //stackoverflow.com/a/11053251/594235
在ASP.NET MVC3站点中,这对我有用,在该站点中,我离开了框架来设置非侵入式验证等,以防对任何人有用:
$("form").data("validator").settings.ignore = "";
确保放
$.validator.setDefaults({ ignore: '' });
内部没有 $(document).ready
因此,我将深入探讨为什么这种方法不起作用,因为我是那种无法在不知道哈哈的情况下无法入睡的人。 我正在使用jQuery validate 1.10和Microsoft jQuery Unobtrusive Validation 2.0.20710.0(发布于2013年1月29日)。
我首先在jQuery Validate中搜索setDefaults方法,并在未缩小文件的第261行找到了它。 此功能真正要做的就是将您的json设置合并到现有的$.validator.defaults
中,该$.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 = "";
作为设置忽略属性的一种方式。 原因是当查看validate函数时,它检查以查看是否已经通过$.data()
函数为form元素存储了一个验证器对象。 如果找到与form元素一起存储的验证器对象,则仅返回该验证器对象,而不创建另一个对象。
这在ASP.NET站点中对我有用。 要对某些隐藏字段启用验证,请使用此代码
$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";
要启用对表单所有元素的验证,请使用此$("form").data("validator").settings.ignore = "";
请注意,在$(document).ready(function() { })
中使用它们
只需在特定表单的特定页面中添加ignore: []
,此解决方案对我有用。
$("#form_name").validate({
ignore: [],
onkeyup: false,
rules: {
},
highlight:false,
});
这对我有用。
jQuery("#form_name").validate().settings.ignore = "";
只要在您的jquery验证文件中找到忽略的文本:“:hidden”并将其注释即可。 评论后,它将永远不会丢失任何要验证的隐藏元素...
谢谢