Проблема с плагином jQuery Validate, не проверяющим первую половину формы - PullRequest
0 голосов
/ 16 марта 2011

Я использую jQuery с Validate Plugin и потрясающим методом Натана Лонга require_from_group К сожалению, у меня возникла проблема с проверкой других полей внутри формы.

Все, что находится над набором обязательных полей, не отображает должным образом свои сообщения об ошибках.

Это (плюс jQuery 1.4.2 и Validate Plugin) - мой код:

<form>

<label for="fullName">Name <em>required</em></label>
<input id="fullName" name="fullName" type="text" class="required"><br />

<fieldset>
<legend>Enter 1 of 3 emails <em> required</em></legend>
<label for="field1">field1</label><input id="field1" class="group_required email" type="text" name="field1" /><br />
<label for="field2">field2</label><input id="field2" class="group_required email" type="text" name="field2" /><br />
<label for="field3">field3</label><input id="field3" class="group_required email" type="text" name="field3" /><br />
</fieldset>

<input name="submitbutton" type="submit" />

</form>


<script>
jQuery.validator.addMethod("require_from_group", function(value, element, options) {
    numberRequired = options[0];
    selector = options[1];
    //Look for our selector within the parent form
    var validOrNot = $(selector, element.form).filter(function() {
         // Each field is kept if it has a value
         return $(this).val();
         // Set to true if there are enough, else to false
      }).length >= numberRequired;

        if(!$(element).data('being_validated')) {
            var fields = $(selector, element.form);
            //.valid() means "validate using all applicable rules" (which 
            //includes this one)
            fields.data('being_validated', true).valid();
            fields.data('being_validated', false);
        }
        return validOrNot;
        // {0} below is the 0th item in the options field
    }, jQuery.format("Please fill out at least {0} of these fields."));


$(document).ready(function(){

    $("form").validate({
         debug: true,
    });

    jQuery.validator.addClassRules("group_required", {require_from_group: [1, ".group_required"]});

});

</script>

Фактическая страницаболее сложный, но это весь код, который вам нужен, чтобы повторить проблему.Отправьте форму без заполнения каких-либо полей, и вы увидите сообщение об ошибке рядом с 3 в группе, но не в поле имени.Если поле имени находится в HTML после проверки набора полей, оно работает нормально.При выделении фокуса поля имени, а затем размытия появляется правильное сообщение об ошибке, но оно не появляется при отправке.

Я видел еще одного человека с этой проблемой в комментариях к исходному вопросу, но не видел ответов:(

Закомментирование:

fields.data('being_validated', true).valid();

исправляет проблему с отображением сообщения об ошибке, но вновь вводит проблемы, которые пытался решить Натан.

1 Ответ

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

не нужно ли добавлять правила для других полей?

$("form").validate({
    debug: true,
    rules: {
        'fullName': {
            required: true
        }
    }
});
...