我在yii中有一个表单来验证表单字段。当我提交表单时,它会显示错误。 但是,当更新具有验证错误的字段的值时,错误仍然存在。 我希望消息清楚。我该如何清除验证错误?
表单小部件代码
下方<?php $form = $this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation'=>true
)); ?>
在我的表单中,我回复验证错误,如下面的代码:
<?php echo $form->error($model, 'firstname'); ?>
我尝试了解决这个问题的方法 Trigger Yii field validation onchange of another field
$('#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”字段的那些验证错误是那些仅未更新/清除的字段。
[编辑] 表单被提交后打印/回显的所有验证错误都不会消失,即使提供了值或更改以满足验证规则。
答案 0 :(得分:1)
将其放在// trigger ajax validation
评论的上方:
$('.errorSummary, .errorMessage').hide();
这应该在重新验证之前重置错误。
答案 1 :(得分:1)
在我的情况下,我在页面上添加了以下代码,以删除表单上输入字段的红色突出显示。
$('#user-form select, #user-form input').change(function(){
field = $(this).attr('id');
if($('#'+field+'_em').text() == ''){
$(this).removeClass('error');
}
});
我还在framework / web / js / source / jquery.yiiactiveform.js上添加了updateInput函数,因此它将删除某些字段的验证错误。
if(hasError == false){
$error.toggle(hasError);
$el2 = form.find('#' + attribute.id);
$el2.removeClass(attribute.errorCssClass);
}
我不确定这是否是正确的解决方案,但它对我有用。
答案 2 :(得分:0)
使用表单窗口小部件代码,我认为ajax验证不起作用。
要在表单上启用Ajax验证,您应该按如下方式配置窗口小部件,
<?php
$form = $this->beginWidget('CActiveForm', array(
'id'=>'user-form',
'enableAjaxValidation' => true,
'clientOptions' => array(
'validateOnSubmit' => true,
),
));
?>
使用此配置,当表单字段丢失焦点(模糊)时,将验证表单。
尝试一下,它将为您的问题提供解决方案。