我在yii中制作网格视图,我的问题是,如果我单击选择所有复选框,然后我转到下一个网格,然后再次点击选择全部,之后我应该得到20个值。但我只得到10个从当前网格获得的值。如何在控制器中获取所有选中的复选框值?
这是我的观点
<form action="<?php echo Yii::app()->createAbsoluteUrl("emails/getEmails"); ?>" method="post">
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'professional-master-grid',
'dataProvider'=>$model->search($status),
'filter'=>$model,
'selectableRows' => 2,
'afterAjaxUpdate' => "function(id,data){
$('.select-on-check').each(function(){
if(globalselected.indexOf($(this).val()) < 0){
$(this).prop('checked',false);
}else{
$(this).prop('checked',true);
}
});
}",
'beforeAjaxUpdate' => "function(id,data){
if(typeof globalselected == 'undefined') {
globalselected = [];
}
selected = $('.select-on-check:checked').map(function(i) {
return $(this).val();
}).get();//.join(',');
notselected = $('.select-on-check:not(:checked)').map(function(i) {
return $(this).val();
}).get();//.join(',');
for(i=0; i < selected.length; i++){
if(globalselected.indexOf(selected[i]) < 0){
globalselected.push(selected[i]);
}
}
for(i=0; i < notselected.length; i++){
if(globalselected.indexOf(notselected[i]) >= 0)
globalselected.splice(globalselected.indexOf(notselected[i]), 1);
}
}",
'columns'=>array(
/*'id',*/
array(
'header'=>'SN.',
'value'=>'$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)',
),
array(
'class' => 'CCheckBoxColumn',
'selectableRows' => 2,
'checkBoxHtmlOptions' => array(
'name' => 'nos[]','class'=>'select-on-check','id'=>'example-check-boxes',
'type'=>'raw'
),
'value'=>'$data->id',
),
array(
'header'=>'Center name',
'value'=>'urldecode($data->center_name)',
'name'=>'center_name',
'sortable'=>FALSE,
),
array(
'header'=>'Fitness Center Type',
'value'=>'@$data->getRelated("fitnesscenter")->fitnesscenter_type',
'name'=>'fitnesscenter',
'sortable'=>FALSE,
),
array(
'header'=>'City',
'value'=>'@$data->getRelated("city_id")->city_name',
'name'=>'city_id',
'sortable'=>FALSE,
),
array(
'header'=>'Locality',
'value'=>'@$data->getRelated("locality")->locality',
'name'=>'locality',
'sortable'=>FALSE,
),
),
));
?>
<input type="submit" class="btn btn-primary" id="submit" value="submit" />
</form>
这是我的控制器
var_dump($_POST['nos']);
答案 0 :(得分:0)
为什么要在页面之间保留选定的数据?我个人不喜欢这样,但无论如何。
我看到你做了一个javascript实现,它使用一个变量来保存所有选定的id。
我可以看到它在ajax更新之前(在更改页面之前)保存了id,并且在返回上一页时还会恢复已经选择的ID。
但是你可能会错过绑定一个事件,点击任何一个复选框,也将它们添加到这个javascript变量。我会将beforeAjaxUpdate
中的代码放到外面的单独的js函数中。然后从这里调用它,并在每个复选框的click事件中调用它。嗯,我认为仅通过点击事件调用它就足够了。
此外,我可以看到selectableRows
设置为2,我想应该删除。
最后,我将创建一个名为"globalselected"
的隐藏字段,每次更改globalselected
js数组后,我会将其转换为String并将其作为隐藏字段的值。
然后在控制器中,您会找到$_POST['globalselected']
。