在新版本的jQuery验证插件1.9中默认为validation of hidden fields ignored。我正在使用CKEditor进行textarea输入字段,它隐藏了字段并将其替换为iframe。该字段在那里,但是对隐藏字段禁用了验证。使用验证插件版本1.8.1,一切都按预期工作。
所以我的问题是如何使用v1.9验证插件启用隐藏字段的验证。
此设置不起作用:
$.validator.setDefaults({ ignore: '' });
答案 0 :(得分:302)
该插件的作者说你应该使用“没有引号的方括号”,[]
http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/
发布:验证插件1.9.0: “......另一个变化应该是使用隐藏元素设置表单 更容易,这些现在默认被忽略(选项“忽略”有 “:隐藏”现在默认为)。从理论上讲,这可能打破现有的局面 建立。在实际情况不太可能发生的情况下,您可以通过修复它 将ignore-option设置为“[]”(方括号不带 引号)。“
要更改所有表单的此设置:
$.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
});
});
修改强>:
有关如何在某些隐藏字段上启用验证但仍忽略其他字段的信息,请参阅this answer。
编辑2 :
在发表评论“这不起作用”之前,请记住,OP只是询问the jQuery Validate plugin而他的问题是没有要做ASP.NET,MVC或任何其他Microsoft框架如何改变此插件的正常预期行为。如果您使用的是Microsoft框架,那么jQuery Validate插件的默认功能将由Microsoft的unobtrusive-validation
插件覆盖。
如果您正在努力使用unobtrusive-validation
插件,请转而参考此答案:https://stackoverflow.com/a/11053251/594235
答案 1 :(得分:68)
这对我有用,在一个ASP.NET MVC3网站中,我离开框架设置不引人注意的验证等,以防它对任何人都有用:
$("form").data("validator").settings.ignore = "";
答案 2 :(得分:63)
确保放
$.validator.setDefaults({ ignore: '' });
在$(document).ready
内不
答案 3 :(得分:26)
所以我会更深入地了解为什么这不起作用,因为我是那种在不知道哈哈的情况下晚上无法入睡的人。我正在使用jQuery validate 1.10和Microsoft jQuery Unobtrusive Validation 2.0.20710.0,它于2013年1月29日发布。
我首先在jQuery Validate中搜索setDefaults方法,然后在未分解文件的第261行找到它。所有这个函数真正做的是将你的json设置合并到现有的$.validator.defaults
中,这些设置是使用设置为“:hidden”的ignore属性以及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方法设置ignore,然后必须在$(“form”)。validate()被调用之前发生。
如果您正在使用Asp.net MVC和不引人注目的插件,那么您将在查看在document.ready中调用validate的javascript后意识到。我还调用了我的setDefaults在document.ready块中,它将在脚本之后执行,jquery验证并且不引人注意,因为我已经在html中定义了那些带有调用的脚本。因此,我的调用显然对验证期间跳过隐藏元素的默认功能没有影响。这里有几个选择。
选项1 - 你可以像胡安·梅拉多所指出的那样在文件之外进行调用。已经在脚本加载后立即执行。我不确定这个时间,因为浏览器现在能够进行并行脚本加载。如果我只是过于谨慎,请纠正我。此外,有可能解决这个问题,但根据我的需要,我没有走这条路。
选项2a - 我眼中的安全赌注就是用$.validator.setDefaults({ ignore: '' });
替换document.ready事件内的$("form").data("validator").settings.ignore = "";
。这将修改在对给定表单的元素进行每次验证时jQuery验证实际使用的ignore属性。
选项2b - 在查看代码之后,您还可以使用$("form").validate().settings.ignore = "";
作为设置ignore属性的方法。原因是当查看validate函数时,它会检查是否已经通过$.data()
函数为表单元素存储了验证器对象。如果它找到与表单元素一起存储的验证器对象,那么它只返回验证器对象而不是创建另一个验证器对象。
答案 4 :(得分:9)
这在ASP.NET站点中对我有用。 要在某些隐藏字段上启用验证,请使用此代码
$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";
要为表单的所有元素启用验证,请使用此方法
$("form").data("validator").settings.ignore = "";
请注意,请在$(document).ready(function() { })
答案 5 :(得分:8)
刚刚在特定表单的特定页面中添加了ignore: []
,此解决方案对我有用。
$("#form_name").validate({
ignore: [],
onkeyup: false,
rules: {
},
highlight:false,
});
答案 6 :(得分:0)
这对我有用。
jQuery("#form_name").validate().settings.ignore = "";
答案 7 :(得分:0)
该验证对我来说适用于表单提交,但是它没有对所选选择列表的输入进行响应事件驱动的验证。
为解决此问题,我添加了以下内容以手动触发库添加的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
。
答案 8 :(得分:-12)
只需在jquery验证文件中找到忽略:":隐藏" 文本并对其进行评论。 评论之后,它永远不会丢失任何隐藏的元素来验证......
由于