AJAX验证未在表格输入字段上触发

时间:2014-07-11 23:08:05

标签: javascript php ajax yii

验证适用于我表单上的第一个模型,但不适用于循环的模型的Items数组。 - 现在验证发生时这是不正确的,但在编辑任何BookingRoom输入字段时不会触发。

我发现当我将数据重新输入到刚刚删除了数据的预订字段(在重新输入后在输入框中显示绿色背景)时会触发ajax验证,但是当它被激活时不会触发我点击其中一个BookingRoom输入字段并编辑其中一个。我在Firebug中调试了AJAX响应以编辑Booking字段,并且为任何无效的BookingRoom字段发送错误消息。

这是我的performAjaxValidation函数:

protected function performAjaxValidation($model, $items)
   {
    if(isset($_POST['ajax']) && $_POST['ajax']==='booking-form')
    {
        //echo CActiveForm::validate($model);                                                
                    $model = CJSON::decode(CActiveForm::validate($model));
                    $items = CJSON::decode(CActiveForm::validateTabular($items));
                    var_dump(CJSON::encode(CMap::mergeArray($model, $items)));
                    Yii::App()->end();          
    }
}

Update.php

<?php //Yii::app()->clientScript->registerCoreScript('jquery'); ?>
<?php
/* @var $this BookingController */
/* @var $model Booking */
/* @var $bookingRoom BookingRoom */

$this->breadcrumbs=array(
'Bookings'=>array('index'),
$model->id=>array('view','id'=>$model->id),
'Update'
);

$this->menu=array(
array('label'=>'List Booking', 'url'=>array('index')),
array('label'=>'Create Booking', 'url'=>array('create')),
array('label'=>'View Booking', 'url'=>array('view', 'id'=>$model->id)),
array('label'=>'Manage Booking', 'url'=>array('admin'))
);
?>

<h1>Update Booking <?php echo $model->id; ?></h1>

<?php //$this->renderPartial('_form', array('model'=>$model)); ?>

<div class="form">
<button id="btnAdd" type='btnAdd'>Add</button>
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'booking-form',
// Please note: When you enable ajax validation, make sure the corresponding
// controller action is handling ajax validation correctly.
// There is a call to performAjaxValidation() commented in generated controller code.
// See class documentation of CActiveForm for details on this.
'enableAjaxValidation'=>true, 'enableClientValidation' => true, 'errorMessageCssClass' =>  'error'
)); ?>

<p class="note">Fields with <span class="required">*</span> are required.</p>

<?php echo $form->errorSummary(array($model)); ?>


<div class="row">
    <?php echo $form->labelEx($model,'customerId'); ?>
    <?php echo $form->textField($model,'customerId'); ?>
    <?php echo $form->error($model,'customerId'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'date'); ?>
    <?php echo $form->textField($model,'date'); ?>
    <?php echo $form->error($model,'date'); ?>
</div>

    <table id="tblData">
        <tbody>
    <?php foreach($items as $i=>$item): ?>

        <tr>


            <td>
    <div>
    <?php echo $form->labelEx($item,'Room No'); ?>
    <?php echo $form->dropDownList($item, "[$i]roomId", CHtml::listData(
    Room::model()->findAll(), 'id', 'id'), array('single'=>'single', 'size'=>1)
    ); ?>

    </div>
            </td><td>
    <div>
    <?php echo $form->labelEx($item,'startDate'); ?>
    <?php echo $form->textField($item,"[$i]startDate"); ?>
    <?php echo $form->error($item,'startDate'); ?>
</div>
                </td><td>
    <div>
    <?php echo $form->labelEx($item,'endDate'); ?>
    <?php echo $form->textField($item,"[$i]endDate"); ?>
    <?php echo $form->error($item,'endDate'); ?>
</div>
    </td><td>
    <div>
    <?php echo $form->labelEx($item,'adults'); ?>
    <?php echo $form->dropDownList($item, "[$i]adults", array('1'=>'1',
                                                                 '2'=>'2',
                                                                 '3'=>'3',
                                                                 '4'=>'4',
                                                                 '5'=>'5'), array('single'=>'single', 'size'=>1)
    ); ?>

    </div>
</td><td>
            <div>
    <?php echo $form->labelEx($item,'children'); ?>
    <?php echo $form->dropDownList($item, "[$i]children", array('1'=>'1',
                                                                 '2'=>'2',
                                                                 '3'=>'3',
                                                                 '4'=>'4',
                                                                 '5'=>'5'), array('single'=>'single', 'size'=>1)
    ); ?>

    </div>
    </td>
    <td>
        <button type='button'>Delete</button>
    </td>
    </tr>
    <?php endforeach; ?>
        </tbody>
    </table>


    <div class="row buttons">
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>

<?php $this->endWidget(); ?>

</div><!-- form -->

1 个答案:

答案 0 :(得分:0)

在你的Yii视图表格中,如下所述声明beginWidget,

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

确保您的模型至少有一个针对该方案的验证规则

public function rules()
{
  return array(
    array('attribute, attribute1', 'required'),
  );
}

有关详细信息,请访问链接

下方

http://knackforge.com/blog/vishnu/yii-how-enable-ajax-form-validation