yii Проверка клиента CActiveForm не работает на каком-то поле

0

В моем приложении 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

"subject" и "message" - это два поля модели "Уведомление". в модели Notification я определил это правило:

array('subject, message', 'required')

моя проблема - валидация для "предметных" работ, но проверка на "сообщение" не работает! после отправки формы появляется сообщение об ошибке "subject", но "сообщение" не имеет ошибки. может ли кто-нибудь помочь мне решить эту проблему? Я использую Yii 1.1.15

  • 1
    Есть ли причина для HTML-идентификатора атрибута «сообщение» в поле сообщения? Yii CActiveForm генерирует конкретный идентификатор: modelName_fieldName, вам не нужно устанавливать идентификатор (как ваше поле темы; у него нет идентификатора). YII нужны эти форматы идентификаторов для проверки и многое другое. Удалите идентификатор в поле сообщения и протестируйте снова
  • 0
    Да ты прав. решено, спасибо за ваш комментарий :)
Показать ещё 1 комментарий
Теги:
yii
client-side-validation
yii-cactiverecord

2 ответа

0
Лучший ответ

Есть ли причина для атрибута HTML "id" => "message" в вашем поле сообщения? Yii CActiveForm генерирует конкретный идентификатор HTML: modelName_fieldName для каждого поля.

Вам не нужно устанавливать идентификатор вручную (например, поле темы, оно не имеет идентификатора). Yii нуждается в таком формате идентификаторов для валидации, получения/публикации данных и других вещей (как функции client/js).

Удалите "id" => "message" в поле сообщения и повторите тест.

1

в 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(); ?>

я думаю, что u set enableAjaxValidation = true

Ещё вопросы

Сообщество Overcoder
Наверх
Меню