3

私は Yii クライアント検証を使用していくつかの入力を検証します。ユーザー入力にエラーがある場合、Yii クライアント検証は送信を妨げず、ajax リクエストも妨げません。私はグリッドウィジェット「carvw-grid」を使用し、ユーザーが送信ボタンをクリックすると、「carvw-grid」コンテンツを結果で更新する ajax リクエストを作成します。クライアントの検証エラーが発生した場合に、送信および ajax リクエストを防止したい。

ここに私のスクリプトコードがあります:

Yii::app()->clientScript->registerScript('search', "
$('.search-button').click(function(){
$('.myloading').show();
$('.myshow').hide();
$('.myresult').slideUp().delay(3000).queue(function() {
    $(this).show();
    $('.myloading').hide();
    $('.myloading').addClass('myshow');
    });
    });

$('.search-form form').submit(function(){
    $.fn.yiiGridView.update('carvw-grid', {
        data: $(this).serialize()
    });
    return false;
});
");

ここに私のフォームがあります

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'carvw-form',
    'action'=>Yii::app()->createUrl($this->route),
    'method'=>'get',
    'enableAjaxValidation'=>false,
    'enableClientValidation'=>true,
    'focus'=>array($model,'OWNER_ID'),
    'clientOptions' => array('validateOnSubmit'=>true, 'validateOnType'=>true),

)); ?>

ここに私の送信ボタンがあります

<div class="row buttons">
    <?php echo CHtml::submitButton('search',array('class'=>'search-button')); ?>
</div>

ここに私のグリッドがあります

<?php 
    $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'carvw-grid',
    'dataProvider'=>$model->search(),

    'columns'=>array('CAR_COMPANY_NAME','MODEL_YEAR',
        'CAR_COLOR_NAME',
        'USING_TYPE_NAME',array(
            'class'=>'CButtonColumn',
        ),
    ),
));

 ?>

クライアント検証エラーで送信および ajax リクエストを防ぐにはどうすればよいですか?

4

1 に答える 1

2

送信イベントをバインドする代わりに、 afterValidate 関数を使用する必要があるかもしれません。CActiveForm.clientOptions 配列に次の要素を追加します。

'afterValidate' => 'js:afterValidate',

あなたのJavaScriptファイルで:

function afterValidate(form, data, hasError) {
    if (!hasError) {    
        $.fn.yiiGridView.update('carvw-grid', {
            data: $(this).serialize()
        });
    }
    return false;
}
于 2012-04-21T15:56:19.157 に答える