2012-04-19 1 views
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リクエストを防止するにはどうすればよいですか?

+0

私はYiiのに触れたことがありませんが、私はライン '「enableAjaxValidation」を疑問視する方法オフベースだろう=> false、 '? – Rick

+0

私はajax検証を使用しませんでした。私はクライアント検証のみを使用しました.Ajax要求は検索結果を取得するために使用されました。 – diaaf

+0

'$ form-> error($ model、 'field')'を呼びますか? http://www.yiiframework.com/doc/api/1.1/CActiveForm#c5223 –

答えて

1

おそらく、バインディングサブミットイベントの代わりにafterValidate関数を使用する必要があります。あなたのjavascriptファイルで

'afterValidate' => 'js:afterValidate', 

:CActiveForm.clientOptions配列に次の要素を追加し

function afterValidate(form, data, hasError) { 
    if (!hasError) {  
     $.fn.yiiGridView.update('carvw-grid', { 
      data: $(this).serialize() 
     }); 
    } 
    return false; 
} 
+0

ありがとうあなたのコメントのために、しかし悲しいことに、これは私の問題を解決するのに役立たなかった。 – diaaf

+0

何が起きているのか確認できるライブサイトがありますか?あなたのYiiバージョンは何ですか? –

+0

'afterValidate'は正常に動作しています。また、入力のIDを手動で指定する場合は、 '$ form-> error'にinputIDを指定する必要があります。これを確認してください:[リンク](http://pastebin.com/LaKygQcJ)。この助けを願っています。 –

関連する問題