我正在使用Yii,我有 CGridView 这里有一个 CCheckBoxColumn 作为定义的列的一部分。
this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'filter' => $model,
'columns' => $columns
),
'selectableRows'=>2
));
将 selectableRows设置为2 可以点击gridview内部行的任何部分'选中/取消选中'那一行也是。这是一个有用的功能,因此如果用户非常小,用户将不再需要特别勾选复选框图标。
不幸的是,我需要限制复选框勾选为仅在单击复选框图标/输入元素本身或至少列时切换切换,而不是该行的任何其他列。看起来这个功能尚未成功或者不会成为现实,而且我想以某种方式覆盖J来实现这一目标,但我不知道从哪里开始。感谢。
答案 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