1

我正在使用一个 CGridView,其中我有一个 CButtonColumn,我为其定义了一个按钮。“点击” js 没有被调用。该 URL 被调用并完成。我想向用户显示确认信息,但它从未出现。根据文档,'click' 是一个在点击时调用的 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. 使用beforeSendjquery 的 ajax 选项来显示确认对话框,警报不是确认,顺便说一句。
  2. 使用successjquery 的 ajax 选项更新您的视图,或向用户显示重置完成的消息。
于 2012-02-28T15:00:56.390 回答