yii CActiveForm 客户端验证在某些字段上不起作用


yii CActiveForm client validation not working on some field

在我的yii应用程序中,我有一个简单的表单,其中包含两个字段,如下所示:

<?php
                        $form = $this->beginWidget('CActiveForm', array(
                            'id' => 'message-form',
                            'enableClientValidation' => true,
                            //'enableAjaxValidation' => true,
                            'clientOptions' => array(
                                'validateOnSubmit' => true,
                                'validateOnChange' => false,
                                'validateOnType' => false,
                                'errorCssClass' => 'has-error',
                                'successCssClass' => 'has-success',
                        )));
                        ?>
                        <div class="form-group">
                            <div class="row">
                                <div class="col-md-6">
                                    <?php echo $form->labelEx($model, 'subject'); ?>
                                    <?php echo $form->textField($model, 'subject', array('class' => 'form-control')); ?>
                                    <?php echo $form->error($model, 'subject', array('class' => 'alert alert-danger')); ?>
                                </div>
                                <div class="col-md-5"></div>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="row">
                                <div class="col-md-6">
                                    <?php echo $form->labelEx($model, 'message'); ?>
                                    <?php echo $form->textField($model, 'message', array('class' => 'form-control', 'id'=>'message')); ?>
                                    <?php echo $form->error($model, 'message', array('class' => 'alert alert-danger')); ?>
                                </div>
                            </div>
                        </div>
                         ......
                         //remaining of code
"

主题"和"消息"是"通知"模型的两个字段。 在通知模型中,我定义了以下规则:

array('subject, message', 'required')
我的问题是"主题"的验证

有效,但"消息"的验证不起作用!提交表单后,会显示"主题"的错误消息,但"消息"没有任何错误。谁能帮我解决这个问题?我使用 Yii 1.1.15

在 http://www.yiiframework.com/doc/api/1.1/CActiveForm 中你可以看到示例

<?php $form = $this->beginWidget('CActiveForm', array(
    'id'=>'user-form',
    'enableAjaxValidation'=>true,
    'enableClientValidation'=>true,
    'focus'=>array($model,'firstName'),
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
    <?php echo $form->labelEx($model,'firstName'); ?>
    <?php echo $form->textField($model,'firstName'); ?>
    <?php echo $form->error($model,'firstName'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($model,'lastName'); ?>
    <?php echo $form->textField($model,'lastName'); ?>
    <?php echo $form->error($model,'lastName'); ?>
</div>
<?php $this->endWidget(); ?>

我认为你设置启用Ajax验证=真

是否有原因在您的消息字段中"id" => "message" HTML 属性?Yii CActiveForm 为每个字段生成一个特定的 HTML id: modelName_fieldName

您不需要手动设置 id(就像您的主题字段一样;它没有 id)。Yii 需要这些格式的 id 来验证、获取/发布数据和更多的东西(作为客户端/js 函数)。

删除消息字段上的"id" => "message",然后再次测试。