Очистить сообщение об ошибке проверки при обновлении или выборе значения

У меня есть форма в YII, которая проверяет поле формы. Когда я отправляю форму, она показывает ошибки. Но когда значение поля с ошибкой проверки обновляется, ошибка все еще присутствует. Я хочу, чтобы сообщение очистилось. Как я должен очистить ошибку проверки?

Ниже кода виджета формы

<?php $form = $this->beginWidget('CActiveForm', array(
    'id'=>'user-form',
    'enableAjaxValidation'=>true
)); ?>

В моей форме я повторяю ошибку проверки, как показано ниже:

 <?php echo $form->error($model, 'firstname'); ?> 

Я попытался решить эту проблему Триггер Yii проверки поля замены другого поля

$('#user-form').change(function(){

    var settings = $(this).data('settings');
    $.each(settings.attributes, function () {
        this.status = 2; // force ajax validation
    });
    $(this).data('settings', settings);

    // trigger ajax validation
    $.fn.yiiactiveform.validate($(this), function (data) {
        $.each(settings.attributes, function () {
            $.fn.yiiactiveform.updateInput(this, data, $(this));
        });

    });
});

Но сообщение об ошибке все еще не очищено. Я подтвердил, что запрос ajax отправлен, и есть ответ, как показано на консоли firebug.

[РЕДАКТИРОВАТЬ] Похоже, что эти ошибки проверки для полей "select" являются не только обновленными / очищенными.

[РЕДАКТИРОВАТЬ] Все ошибки проверки, которые выводятся / выводятся после отправки формы, не исчезают, даже если значение введено или изменено в соответствии с правилами проверки.

3 ответа

Поместите это чуть выше // trigger ajax validation комментарий:

$('.errorSummary, .errorMessage').hide();

Это должно сбросить ошибки до их повторной проверки.

В моем случае я добавил код ниже на странице, чтобы убрать красное выделение в поле ввода в форме.

$('#user-form select, #user-form input').change(function(){

    field = $(this).attr('id');

    if($('#'+field+'_em').text() == ''){
        $(this).removeClass('error');
    }
});

Я также добавляю функцию updateInput в framework/web/js/source/jquery.yiiactiveform.js, чтобы она убрала ошибку проверки для определенного поля.

if(hasError == false){
    $error.toggle(hasError);
    $el2 = form.find('#' + attribute.id);
    $el2.removeClass(attribute.errorCssClass);
}

Я не уверен, что это правильное решение, но оно работает для меня.

С вашим кодом формы виджета, я не думаю, что проверка AJAX не будет работать.

Чтобы включить проверку Ajax в форме, вы должны настроить свой виджет, как показано ниже:

<?php
$form = $this->beginWidget('CActiveForm', array(
    'id'=>'user-form',
    'enableAjaxValidation' => true,
    'clientOptions' => array(
        'validateOnSubmit' => true,
    ),
        ));
?>

С этой конфигурацией ваша форма будет проверена, когда поле формы потеряло фокус (размытие).

Попробуйте, это даст решение вашей проблемы.

Другие вопросы по тегам