плагин проверки jquery не удаляет класс ошибок при пустом вводе [дубликаты]

0

У меня возникла проблема с плагином проверки jquery, который не удаляет класс ошибки в пустой записи (что разрешено) в этом случае. Я применяю только одно настраиваемое правило к вводу, которое допускает пустой ввод.

В качестве примера...

  • Я вводил что-то недействительное для ввода, например ####, и переход к следующему входу.
  • вход становится красным, и сообщение об ошибке отображается ниже моего поля fname.
  • Я возвращаюсь к нему и удаляю '####'. При этом сообщение об ошибке исчезает, НО вход остается красным. Я могу перемещаться и покидать поле, и он все еще остается красным.
  • В то время как только ввод краснеет, если я ввожу какой-либо единственный действительный символ в поле пустого поля, красный исчезает.

Итак, я думаю, мой вопрос в том, почему сообщение об ошибке удалено правильно, но класс для ввода не удаляется (выделение красным цветом)?

Я проверил это в firebug... класс has-error не удаляется из <div class="col-md-6 form-group"> при удалении ####, но это если я удалю и введите один действительный символ.

HTML:

<div class="col-md-6 form-group">
    <label><b>First Name</b></label>
    <div class="input-group">
        <span class="input-group-addon">
            <i class="fa fa-user fa-fw"></i>
        </span>
        <input class="form-control" type="text" name="fname" <?php echo ($_SESSION['account']['fname'] ? 'data-default="true" value="'.$_SESSION['account']['fname'].'"' : 'placeholder="first name"'); ?>/>
    </div>
    <span class="help-block"></span>
</div>

ЯШ:

    $('#account-info-form').validate({
        errorElement: 'span', //default input error message container
        errorClass: 'help-block', // default input error message class
        focusInvalid: false, // do not focus the last invalid input
        rules: {
            fname: {
                cname: true
            }
        },

        messages: {
            fname: {
                cname: "Enter a valid first name."
            }
        },

        highlight: function (element) { // hightlight error inputs
            $(element)
                .closest('.form-group').addClass('has-error'); // set error class to the control group
        },

        success: function (label) {
            label.closest('.form-group').removeClass('has-error');
            label.remove();
        },

        errorPlacement: function (error, element) {
            error.insertAfter(element.closest('.input-group'));
        }

    });

    // custom name (first or last) validation
    $.validator.addMethod("cname", function (value,element) {
        return this.optional(element) || /^[a-z][a-z .,\-]{0,31}$|^$/i.test(value);
    },"Please enter a valid name.");

    // return default values on blank and do not cause error (if valid)
    $('input[data-default="true"]').on('blur', function() {
        if ( $(this).val() == '' ) {
            $(this).val( this.defaultValue );
            $(this).valid();
        }
    });
Теги:
jquery-validate

2 ответа

1
Лучший ответ

В документах я смог найти "несвежие", которые, я думаю, я пропустил ранее.

unhighlight: function (element) { // un-hightlight error inputs
  $(element)
  .closest('.form-group').removeClass('has-error'); 
},
  • 1
    Да, я почти упомянул об этом в вашем последнем вопросе, на который я ответил. Да, unhighlight является дополнением к highlight . Где-то там должна быть плохая демонстрация, потому что на SO мы слишком часто видим, что success неправильно используется вместо unhighlight .
  • 0
    Я согласен. В моем случае я работаю над существующим шаблоном, который использовал это. Я просмотрел документы на плагин, но так и не вспомнил, увидев этот. Быстро и легко исправить, хотя однажды я сделал.
0

Я думаю, вам нужно использовать .length

$('input[data-default="true"]').on('blur', function() {
    if ( $(this).length==0) {
        $(this).val( this.defaultValue );
        $(this).valid();
    }
});

РЕДАКТИРОВАНИЕ

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

DEMO http://jsfiddle.net/HBfJB/

  • 0
    На самом деле в этом примере этот пользовательский обработчик даже не вызывается. $_SESSION['account']['fname'] сейчас не установлено, так как я только что тестирую, поэтому вход получает только 'placeholder="first name" от php. У меня нет проблем с этим обработчиком, так как он корректно работает с другими входами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню