将可选择的Yii CGridView行限制为复选框列

时间:2015-11-03 08:35:01

标签: javascript jquery gridview checkbox yii

我正在使用Yii,我有 CGridView 这里有一个 CCheckBoxColumn 作为定义的列的一部分。

this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $dataProvider,
    'filter' => $model,
    'columns' => $columns
    ),
    'selectableRows'=>2
));

selectableRows设置为2 可以点击gridview内部行的任何部分'选中/取消选中'那一行也是。这是一个有用的功能,因此如果用户非常小,用户将不再需要特别勾选复选框图标。

不幸的是,我需要限制复选框勾选为仅在单击复选框图标/输入元素本身或至少时切换切换,而不是该行的任何其他列。看起来这个功能尚未成功或者不会成为现实,而且我想以某种方式覆盖J来实现这一目标,但我不知道从哪里开始。感谢。

2 个答案:

答案 0 :(得分:1)

'columns'中你应该像第一个元素一样添加新数组:

    array(
        'class' => 'CCheckBoxColumn',
        'id'=>'selectableColumn',
        'selectableRows'=>2,
    ),

并从数组索引'selectableRows'中删除。此数组是列的配置,其中包含复选框。所以,基本上,你应该添加到上面提到的$columns变量数组中。这是一个例子:

$this->widget('zii.widgets.grid.CGridView', array(
   'dataProvider' => $dataProvider,
   'filter' => $model,
   'columns' => array( // <- this is your $columns variable!
        array( // <- just add this array to your $columns var
            'class' => 'CCheckBoxColumn',
            'id'=>'selectableColumn',
            'selectableRows'=>2,
        ),
        'columnName1',
        'columnName2',
        ...
   ),
));

答案 1 :(得分:0)

您可以在代码中覆盖js,请参阅下面的示例:

停止在网格tr上传播点击事件的代码

Yii::app()->clientScript->registerScript('tr-event-propagation', '$(".grid-view tr").click(function(event){
    event.stopPropagation();
});');

要在行中添加复选框的列数组代码

array(
   'class' => 'CCheckBoxColumn',
   'selectableRows' => null,
   'htmlOptions' => array(
                         'onclick' => 'js: $(this).find("input").trigger("click")'
                    ),
   'checkBoxHtmlOptions' => array(
                             'onclick' => 'js: $(this).trigger("click")'
                            ),
   'selectableRows' => 2
),

希望此解决方案能为您提供帮助

注意:使用event.stopPropagation();可能会破坏其他javascript绑定tr或tr

的其他元素