1

ボタンを定義したCButtonColumnがあるCGridViewを使用しています。「クリック」jsは呼び出されていません。ただし、URLは呼び出され、完了します。ユーザーに確認を表示したいのですが、表示されません。ドキュメントによると、「クリック」はクリック時に呼び出されるJS関数ですが、私には機能しません。

$this->widget('zii.widgets.grid.CGridView', array(
            'dataProvider'=>$model->search(),
            'filter'=>$model,
            'columns'=>array(
                    'id',
                    'name',
                    'question',
                    'created',                      
                    array(
                            'class'=>'CButtonColumn',
                            'header'=>'Reset',
                            'template'=>'{reset}',
                            'buttons'=>array(
                                    'reset'=>array(
                                            'label'=>'Reset',
                                            'click'=>'function(){alert("Are you sure?");}',
                                            'imageUrl'=>Yii::app()->request->baseUrl.'/images/reset.png',
                                            'url'=>'Yii::app()->createUrl("favs/reset", array("id"=>$data->id))',                                           
                                            'options'=>array(
                                                    'ajax'=>array(
                                                            'type'=>'POST',
                                                            'url'=>"js:$(this).attr('href')",                                                               
                                                    ),
                                            ),
                                    ),
                            ),                      
                    ),                      
            ),
    ));
4

1 に答える 1

1

これは、Yiiがコード用に生成したjQueryと関係があります。

jQuery('#your-grid-id a.reset').live('click',function(){alert("Are you sure?");});
/* more jquery ... 
... 
...
*/
jQuery('body').undelegate('#yt1','click').delegate('#yt1','click',function(){jQuery.ajax({'type':'GET','url':$(this).attr('href'),'cache':false,'data':jQuery(this).parents("form").serialize()});return false;});
// similar jquery follows for the other rows of the grid view 

ご覧のとおり、<a>タグのクリックイベントハンドラーは、最初にclickオプションを使用して提供するアラート機能です。
その後、このクリックイベントハンドラーはを使用して削除されundelegate、別のハンドラーがを使用しdelegateて追加されます。これは、オプションを追加したために発生しajaxます。
ajaxオプションを削除すると、ダイアログボックスが表示され、生成されたコードからundelegate...delegateシーケンスが削除されていることがわかります。

あなたの機能を達成するために、あなたは何か他のことをすることができます:

  1. jqueryのajaxのオプションを使用してbeforeSend、確認ダイアログを表示します。アラートは確認ではありません。
  2. jqueryのajaxのオプションを使用しsuccessてビューを更新するか、リセットが完了したことをユーザーにメッセージを表示します。
于 2012-02-28T15:00:56.390 に答える