Jquery 验证默认设置不起作用

Jquery Validate default settings doesn't work

默认设置不起作用。 "setdefaults" 命令不执行任何操作。

我的页面可能有很多表格和事情。但无论出于何种原因,它总是忽略 display:none "select box" "select#ffe"。 FFE 是一个选择 select 框,因此它隐藏了 select 框,因此表单不会验证它。

在规则部分,文本框验证正常,但 select 框未验证。

这是我的 jquery.ready:

$.validator.setDefaults({ ignore: ":hidden:not(select)" });
        var validator = $("select#ffe").closest("form").data('validator');
        console.log("V1: ", validator.settings.ignore);

        //validator.settings.ignore = ":hidden:not(select)";
        console.log("V1: ", validator.settings.ignore);
        $("select#ffe").closest("form").validate({
            settings: {
                ignore: ":hidden:not(select)"
                },
            rules: {
          //....... skipping some rules.......
});

$("select#ffe").rules("add", { required: true }); // chosen invisible select box

        console.log("V1: ", validator.settings.ignore);

V1 控制台日志从未更改 "V1: :hidden"。

如果您尝试设置 "validator.settings.ignore = ":hidden:not(select)" [评论因为它不起作用] 它会在表单提交时给您一个不同的错误,说它无法读取 "validator.settings.rules" 因为它是未定义的。jquery.validate.js 中的一个奇怪的错误,因为它说 validator.settings 是空的,这是由你直接设置忽略引起的。

错误针对 jquery.validate.js 中的 if 语句:

staticRules: function( element ) {
        var rules = {};
        var validator = $.data(element.form, "validator");
        if ( validator.settings.rules ) { // BROKEN BECAUSE VALIDATOR.SETTINGS IS EMPTY.

我正在使用:

jQuery 验证插件 1.11.1

jQuery 1.11.1.js

正如您通过控制台日志看到的那样,.setDefaults() 正在运行:http://jsfiddle.net/rop59zw4/


您的选择器错误...":hidden:not(select)" 应该是 ":hidden:not('select')"

缺少 select 周围的引号,因此它正在寻找名为 select 的变量而不是 select 元素标签。

工作演示:http://jsfiddle.net/rop59zw4/


仅供参考 - 没有名为 settings.validate() 选项。 settings 中的任何选项都将被忽略或可能破坏事物...

$('form').validate({
      settings: {  // <-- not a valid option
          ignore: ":hidden:not('select')"  // <- not considered at all
      },
      rules: { ...

此演示显示不存在的 settings 对象中的任何内容都被完全忽略。

演示:http://jsfiddle.net/gmmauz9z/


如果您已经在 .setDefaults() 内设置了 ignore,那么在 .validate() 内设置它会覆盖 .setDefaults()。这允许您为多个表单提供一组默认选项,并能够覆盖单个表单。 (注意:.validate() 方法不能在同一个表单上多次调用。只使用第一个实例,所有其他实例都将被忽略。)

此演示显示 .validate() 个选项优先于 .setDefaults 个选项。

演示:http://jsfiddle.net/bjgb31tj/