繁体   English   中英

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

[英]jQuery Validate - Enable validation for hidden fields

在新版 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 中调用验证的 javascript 后就会意识到。 我还在 document.ready 块中调用了我的 setDefaults,该块将在脚本之后执行,jquery 验证并且不显眼,因为我已经在 html 中定义了那些脚本,然后再调用它。 所以我的调用显然对验证期间跳过隐藏元素的默认功能没有影响。 这里有几个选项。

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

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

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

这在 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 验证事件:

$(".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都包含在div.form-group ,并且每个输入都有.form-control

只需在您的 jquery 验证文件中找到文本ignore: ":hidden"并对其进行评论。 评论后,它永远不会丢失任何隐藏元素来验证......

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM