Jquery验证默认设置不起作用

时间:2015-05-12 17:15:43

标签: jquery jquery-validate jquery-chosen

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

我的网页可能包含很多表单和内容。但无论出于何种原因,它总是忽略显示:无“选择框”“选择#ff”。 FFE是一个选择框,因此它会隐藏选择框,因此表单不会对其进行验证。

在规则部分,文本框验证正常,但选择框不验证。

这是我的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是空的,它是由你直接设置ignore引起的。

错误的目标是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 Validation Plugin 1.11.1

jQuery 1.11.1.js

1 个答案:

答案 0 :(得分:1)

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

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

select周围的引号丢失,因此它正在查找名为select的变量,而不是select元素标记。

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

仅供参考 - 没有名为.validate()的{​​{1}}选项。放置在settings内的任何选项都将被忽略或可能破坏......

settings

此演示显示不存在的$('form').validate({ settings: { // <-- not a valid option ignore: ":hidden:not('select')" // <- not considered at all }, rules: { ... 对象中的任何内容都被完全忽略。

DEMO:http://jsfiddle.net/gmmauz9z/

如果您已在settings内设置ignore,则在.setDefaults()内设置.validate()会覆盖.setDefaults()。这允许您为多个表单设置一组默认选项,并且可以覆盖单个表单。 (注意:.validate()方法不能在同一表单上多次调用。只使用第一个实例,忽略所有其他实例。)

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

DEMO:http://jsfiddle.net/bjgb31tj/