在新版本的jQuery验证插件1.9中默认忽略隐藏字段的验证。我使用CKEditor文本区域输入字段,它隐藏字段,并将其替换为iframe。字段在那里,但是对隐藏字段禁用验证。在验证插件1.8.1版中,一切都能正常工作。
所以我的问题是如何启用验证隐藏字段与v1.9验证插件。
此设置无效:
$.validator.setDefaults({ ignore: '' });
在新版本的jQuery验证插件1.9中默认忽略隐藏字段的验证。我使用CKEditor文本区域输入字段,它隐藏字段,并将其替换为iframe。字段在那里,但是对隐藏字段禁用验证。在验证插件1.8.1版中,一切都能正常工作。
所以我的问题是如何启用验证隐藏字段与v1.9验证插件。
此设置无效:
$.validator.setDefaults({ ignore: '' });
当前回答
这在ASP中为我工作。网的网站。 要对某些隐藏字段启用验证,请使用以下代码
$(“form”).data(“validator”).settings.ignore = “:hidden:not(#myitem)”;
要为表单的所有元素启用验证,请使用此选项 $("形式"). data .settings(“验证器”)。Ignore = "";
注意在$(document).ready(function(){})中使用它们
其他回答
这在ASP中为我工作。网的网站。 要对某些隐藏字段启用验证,请使用以下代码
$(“form”).data(“validator”).settings.ignore = “:hidden:not(#myitem)”;
要为表单的所有元素启用验证,请使用此选项 $("形式"). data .settings(“验证器”)。Ignore = "";
注意在$(document).ready(function(){})中使用它们
所以我要更深入地解释为什么这行不通,因为我是那种晚上不知道就睡不着的人,哈哈。我使用jQuery验证1.10和Microsoft jQuery Unobtrusive Validation 2.0.20710.0,这是在2013年1月29日发布的。
我开始在jQuery Validate中搜索setDefaults方法,并在未缩小的文件的第261行中找到它。这个函数真正做的是将你的json设置合并到现有的$.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()被调用之前发生。
If you're using Asp.net MVC and the unobtrusive plugin, then you'll realize after looking at the javascript that validate is called in document.ready. I've also called my setDefaults in the document.ready block which is going to execute after the scripts, jquery validate and unobtrusive because I've defined those scripts in the html before the one that has the call in it. So my call obviously had no impact on the default functionality of skipping hidden elements during validation. There is a couple of options here.
选项1 -你可以像Juan Mellado指出的那样,在文件之外进行通话。Ready,它将在脚本加载后立即执行。我不确定这个时间,因为浏览器现在能够进行并行脚本加载。如果我只是过于谨慎,请纠正我。此外,可能还有其他方法可以解决这个问题,但出于我的需要,我没有走这条路。
选项2a -在我看来安全的赌注是替换$.validator。setDefaults({ignore: "});在文档内部。准备事件$("form").data("validator").settings。Ignore = "";。这将修改jQuery验证在对给定表单的元素进行验证时实际使用的ignore属性。
选项2b -在查看代码后,您还可以使用$("form").validate().settings。Ignore = "";作为设置ignore属性的一种方式。原因是,在查看验证函数时,它会检查是否已经通过$.data()函数为表单元素存储了验证器对象。如果它发现一个与form元素一起存储的验证器对象,那么它只返回该验证器对象,而不创建另一个。
这对我很有用。
jQuery("#form_name").validate().settings.ignore = "";
插件的作者说你应该使用“不带引号的方括号”,[]
http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/
版本:验证插件1.9.0: "...另一个更改应该使表单的设置具有隐藏元素 更简单的是,现在默认情况下忽略这些(选项“ignore”有 ":hidden "现在为默认值)。理论上,这可能会破坏现有的 设置。在不太可能发生的情况下,你可以通过 将忽略选项设置为“[]”(方括号中没有 引号)。”
为所有表单更改此设置:
$.validator.setDefaults({
ignore: [],
// any other default options and/or rules
});
(并不要求在文档中包含. setdefaults()。准备好函数)
一种特定形式的OR:
$(document).ready(function() {
$('#myform').validate({
ignore: [],
// any other options and/or rules
});
});
编辑:
关于如何在某些隐藏字段上启用验证,但仍然忽略其他字段,请参阅此回答。
编辑2:
在留下“这不起作用”的评论之前,请记住,OP只是在询问jQuery验证插件,他的问题与如何使用ASP无关。NET、MVC或任何其他微软框架都可以改变这个插件的正常预期行为。如果你使用的是微软框架,jQuery Validate插件的默认功能会被微软的unobtrusie -validation插件覆盖。
如果你还在纠结于不显眼的验证插件,那么请参考这个答案:https://stackoverflow.com/a/11053251/594235
只需在jquery验证文件中找到文本ignore: ":hidden"并注释它。 注释后,它将永远不会丢失任何隐藏的元素来验证…
谢谢