Очистить сообщение об ошибке проверки при обновлении или выборе значения
У меня есть форма в 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,
),
));
?>
С этой конфигурацией ваша форма будет проверена, когда поле формы потеряло фокус (размытие).
Попробуйте, это даст решение вашей проблемы.