在新版本的jQuery验证插件1.9中,默认情况下忽略隐藏字段的验证 我将CKEditor用于textarea输入字段,它隐藏了该字段并将其替换为iframe。 该字段在那里,但是对隐藏字段禁用验证。 使用验证插件1.8.1版时,所有功能均按预期工作。

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

此设置无效:

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

===============>>#1 票数:316 已采纳

该插件的作者说,您应该使用“不带引号的方括号”[]

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

===============>>#2 票数:69

在ASP.NET MVC3站点中,这对我有用,在该站点中,我离开了框架来设置非侵入式验证等,以防对任何人有用:

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

===============>>#3 票数:64

确保放

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

内部没有 $(document).ready

===============>>#4 票数:28

因此,我将深入探讨为什么这种方法不起作用,因为我是那种无法在不知道哈哈的情况下无法入睡的人。 我正在使用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元素一起存储的验证器对象,则仅返回该验证器对象,而不创建另一个对象。

===============>>#5 票数:12

这在ASP.NET站点中对我有用。 要对某些隐藏字段启用验证,请使用此代码

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

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

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

===============>>#6 票数:8

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

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

===============>>#7 票数:0

这对我有用。

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

===============>>#8 票数:-13

只要在您的jquery验证文件中找到忽略的文本:“:hidden”并将其注释即可。 评论后,它将永远不会丢失任何要验证的隐藏元素...

谢谢

  ask by Shaman translate from so

未解决问题?本站智能推荐: