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

在新版本的jQuery验证插件1.9中默认使用忽略隐藏字段的验证。我使用CKEditor文本区域输入字段,它隐藏字段,并将其替换为iframe。字段在那里,但是对隐藏字段禁用验证。在验证插件1.8.1版中,一切都能正常工作。

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

此设置无效:

$.validator.setDefaults({ ignore: '' });
194933 次浏览

插件的作者说你应该使用"不带引号的方括号"[]

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

版本:Validation Plugin 1.9.0: "...另一个更改应该使表单的设置具有隐藏元素 更简单的是,现在默认情况下忽略这些(选项“ignore”有 ":hidden "现在为默认值)。理论上,这可能会破坏现有的 设置。在不太可能发生的情况下,你可以通过 将忽略选项设置为“[]”(方括号中没有 引号)。" < / p >

为所有表单更改此设置:

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

(并不要求.setDefaults()document.ready函数中)

一种特定形式的OR:

$(document).ready(function() {


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


});

编辑:

参见这个答案了解如何在一些隐藏字段上启用验证,但仍然忽略其他字段。


编辑2:

在留下“这行不通”的评论之前,请记住OP只是在询问jQuery验证插件,他的问题是没有什么与如何使用ASP。NET、MVC或任何其他微软框架都可以改变这个插件的正常预期行为。如果你使用的是微软框架,jQuery Validate插件的默认功能会被微软的unobtrusive-validation插件覆盖。

如果你正在与unobtrusive-validation插件作斗争,那么请参考这个答案:https://stackoverflow.com/a/11053251/594235

一定要把

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

$(document).ready中的

这对我来说是可行的,在一个ASP。NET MVC3站点,我在那里留下了框架来设置不显眼的验证等,以防它对任何人都有用:

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

所以我要更深入地解释为什么这行不通,因为我是那种晚上不知道就睡不着的人,哈哈。我使用jQuery验证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中定义的其他默认值。此时我们已经重写了ignore。现在让我们看看这个默认属性在哪里被引用。

当我跟踪代码以查看$.validator.defaults被引用的位置时。我注意到,它只被用于一个表单验证器的构造函数,在jQuery验证unminified文件的第170行。

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

此时,验证器将合并已设置的任何默认设置,并将其附加到表单验证器。当你观察那些执行验证、高亮显示、取消高亮显示等操作的代码时,它们都使用了验证器。对象来提取ignore属性。因此,我们需要确保如果我们要用setDefaults方法设置忽略,那么它必须在$("form").validate()被调用之前发生。

如果你使用的是Asp.net MVC和不显眼的插件,那么在看完javascript之后,你会意识到validate在document.ready中被调用。我也在文档中调用了setDefaults。ready块,它将在脚本之后执行,jquery验证和不显眼,因为我已经在html中定义了那些脚本,在其中有调用的脚本之前。因此,我的调用显然对在验证期间跳过隐藏元素的默认功能没有影响。这里有几个选项。

选项1 -你可以像Juan Mellado指出的那样在文档之外调用。Ready,它将在脚本加载后立即执行。我不确定这个时间,因为浏览器现在能够进行并行脚本加载。如果我只是过于谨慎,请纠正我。此外,可能还有其他方法可以解决这个问题,但出于我的需要,我没有走这条路。

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

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

只要在jquery验证文件中找到文本忽略:“隐藏”并注释它。 注释之后,它将永远不会丢失任何隐藏的元素来验证

谢谢

只要在特定表单的特定页面中添加ignore: [],这个解决方案对我有用。

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

这对我来说在ASP。网的网站。 要对某些隐藏字段启用验证,请使用以下代码

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

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

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

这对我很有用。

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

验证在表单提交上为我工作,但它没有对所选选择列表的输入进行响应性事件驱动验证。

为了解决这个问题,我添加了以下内容来手动触发库添加的jquery验证事件:

$(".chosen-select").each(function() {
$(this).chosen().on("change", function() {
$(this).parents(".form-group").find("select.form-control").trigger("focusout.validate");
});
});

jquery。validate现在将.valid类添加到底层选择列表中。

注意:这要求表单输入使用一致的html模式。在我的例子中,每个输入字段都包装在div.form-group中,并且每个输入都有.form-control