jQuery validate - добавление правила приводит к срабатыванию проверки - PullRequest
0 голосов
/ 14 марта 2011

У меня есть код, подобный приведенному ниже, чтобы выполнить некоторую условную проверку полей в моей форме. Основная идея заключается в том, что если что-то вводится в одно поле, то все поля в этой «группе» должны быть обязательными.

jQuery.validator.addMethod('readingRequired', function (val, el) {
    //Readings validation - if a reading or a date is entered, then they should all be ntered.
    var $module = $(el).closest('tr');
    return $module.find('.readingRequired:filled').length == 3;
});

//This allows us to apply the above rule using a CSS class.
jQuery.validator.addClassRules('readingRequired', {
    'readingRequired': true
});

//This gets called on change of any of the textboxes within the group, passing in the
//parent tr and whether or not this is required.
function SetReadingValidation(parent) {

    var inputs = parent.find('input');    
    var required = false;

    if (parent.find('input:filled').length > 0) {
        required = true;
    }

    if (required) {
        inputs.addClass("readingRequired");
    }
    else {
        inputs.removeClass("readingRequired");
    }
}


//This is in the document.ready event:

$("input.reading").change(function () {
        SetReadingValidation($(this).closest("tr"));
    });

Это отлично работает, и я успешно использовал тот же код на других страницах. Небольшая проблема здесь заключается в том, что, когда я ввожу значение в первое текстовое поле и вкладку из него, проверка запускается и отображается сообщение об ошибке. Этого не происходит на других страницах с похожим кодом, скорее, проверка будет ждать, пока форма не будет отправлена ​​впервые. Кто-нибудь знает, почему это может происходить?

1 Ответ

0 голосов
/ 14 марта 2011

Хм.Вы знаете, как это происходит, напишите вопрос, а затем найдите решение самостоятельно.Не уверен, почему это работает точно, но меняю привязку с:

$("input.reading").change(function () {
        SetReadingValidation($(this).closest("tr"));
    });

на

$("input.reading").blur(function () {
        SetReadingValidation($(this).closest("tr"));
    });

Кажется, что решил эту проблему.Все равно был бы признателен за понимание того, почему это может быть ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...