0

我在 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 控制台上显示了响应。

[编辑] 似乎那些“选择”字段的验证错误只是那些没有更新/清除的错误。

[编辑] 提交表单后打印/回显的所有验证错误都不会消失,即使提供值或更改以满足验证规则。

4

3 回答 3

1

// trigger ajax validation将其放在评论上方:

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

这应该在重新验证之前重置错误。

于 2013-06-11T02:55:52.750 回答
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);
}

我不确定这是否是正确的解决方案,但它对我有用。

于 2013-06-11T07:18:42.707 回答
0

使用您的表单小部件代码,我认为 ajax 验证不会起作用。

要在表单上启用 Ajax 验证,您应该如下配置您的小部件,

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

使用此配置,当表单字段失去焦点(模糊)时,您的表单将被验证。

试试看,它会为您的问题提供解决方案。

于 2013-06-11T05:29:34.190 回答