如果返回true,则有效方法不会清除错误消息

时间:2013-03-04 17:26:47

标签: jquery jquery-validate

我提交空表格,一个字段无效。比我更改表单中的内容(不是当前的,无效的字段)并在代码中调用我的无效字段的验证:

$('.myinvalidfield').valid()

它返回此字段有效,但不会删除它的验证错误消息。我该怎么做才能解决这个问题? (我不想手动删除消息和错误类。可以使用设置或JQuery吗?)

更新

我有两个字段,第一个元素不是必需的,第二个元素仅在第一个为空时才需要。我使用这个规则:

首先,必填字段:

    required: function (element) {
        var secondElement = $(selector);
        var value = secondElement.val();
        return value == ""; //if second (not required) field has value, that current element is not required
    },

其次,不是必填字段:

    required: function (element) {
        var secondElement = $(selector);
        if (secondElement.length == 0) return false; //becouse my forms builds dynamicly
        secondElement.valid(); //invoke validation for required field
        return false;
    }

这个规则有效,但是如果我提交带有空字段的表单,它会向我显示一个需要字段的错误,当我更改第一个而不是必填字段时,则所有表单都有效,但错误消息不会从第二个消失元件。

1 个答案:

答案 0 :(得分:1)

默认情况下,当字段生效时,所有错误都会自动清除。

DEMO:http://jsfiddle.net/d55hj/


修改

根据OP:

  

“我有两个字段,第一个元素不是必需的,第二个是必需的   只有当第一个是空的时候。“

试试这个简化版......

$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        rules: {
            field2: {
                required: function () {
                    return $('#field1').is(':blank');
                }
            }
        }
    });

});

<强> HTML

<form id="myform">
    <input type="text" name="field1" id="field1" />
    <input type="text" name="field2" id="field2" />
    <input type="submit" />
</form>

DEMO:http://jsfiddle.net/d55hj/4/


否则,您必须create a custom method才能更精确地控制所有内容......

$(document).ready(function () {

    jQuery.validator.addMethod('customrule', function (value, element) {
        if ($('#field1').val() === "" && $('#field2').val() === "") {
            return false;
        } else {
            $('label.error').hide();
            return true;
        }
    }, "Please fill out field #2 when field #1 is empty");


    $('#myform').validate({ // initialize the plugin
        groups: {  // use 'groups' option to combine both error messages into one
            name: "field1 field2"
        },
        rules: {
            field1: {
                customrule: true
            },
            field2: {
                customrule: true
            }
        }
    });

});

工作演示:http://jsfiddle.net/d55hj/7/