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

У меня есть форма в 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" - это те, которые не обновляются / очищаются только.

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


person Pelang    schedule 11.06.2013    source источник


Ответы (3)


Поместите это прямо над комментарием // trigger ajax validation:

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

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

person Samuel Liew♦    schedule 11.06.2013
comment
не будут ли удалены также поля, которые также должны иметь ошибки проверки? - person Pelang; 11.06.2013
comment
Я думаю, у нас должен быть hide (), поскольку removeClass не скроет текст ошибки. и добавить удаление класса только для полей. спасибо за ответ. но меня беспокоит то, что поля, значения которых не соответствуют проверке, также будут удалены из-за ошибок проверки. - person Pelang; 11.06.2013

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

$('#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);
}

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

person Pelang    schedule 11.06.2013

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

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

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

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

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

person Hearaman    schedule 11.06.2013