我有一个带有 ccheckboxcolumn 的 cgridview ,允许选择复选框。 但是,我想限制一个人可以根据动态值选择的复选框数量。
我做了一些研究,这就是我所做的。但这似乎不起作用。有人可以帮忙吗?
我的代码如下:
cgridview ccheckboxcolumn:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'v-grid',
'dataProvider'=>$dataProvider,
'summaryText'=>'',//remove display result count
'columns'=>array(
array(
'id'=>'autoId',
'class'=>'CCheckBoxColumn',
'header'=>'',
'selectableRows'=>'null',
'cssClassExpression'=>'$data->status=="accepted" ? "hidden" : ""',
),
),
));
cActiveForm的Ajax提交按钮:
echo CHtml::ajaxSubmitButton('Submit',CHtml::normalizeUrl(array('default/viewV','render'=>false)),array('success'=>'js: function(data) {
$("#view").dialog("open");
}'),array('id'=>'submitButton'));
限制复选框选择的Javascript:
Yii::app()->clientScript->registerScript('restrictCbSelection','$("#submitButton").click(function() {
var checkboxCount=$("#v-grid").yiiGridView("getChecked","autoId");
if(checkboxCount.length>6) //will be changing 5 to a variable and that variable value will change dynamically
{
alert("Pls select only 6 items or less");
return false;
}
else console.log(checkboxCount);
});');
最佳答案
yii 框架没有提供您需要的控制方式,但您可以在网格上使用一些 javascript 进行控制。
这样测试:
- 禁用全选行,在 yii 1.10 中您需要使用 javascript 执行此操作,但在 yii 1.11 中您可以使用 CCheckBoxColumn 类中的 headerTemplate
- 控制ajax更新,类似步骤1,如果使用yii 1.11,请避免此步骤
- 控制selectionChange,大量的javascript...
步骤 1
Yii::app()->clientScript->registerScript('restrictCbSelection','
$(document).ready(function(){
$("#pais-grid .select-on-check-all").attr("disabled", true).attr("keys", "");
});');
步骤 2
在 CGridView 上
'afterAjaxUpdate'=>'js:function(id){
$("#pais-grid .select-on-check-all").attr("disabled", true).attr("keys", "");
}',
步骤 3
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'pais-grid',
'dataProvider'=>$dataProvider,
'selectableRows'=>2, //<-- this means multiselect
'afterAjaxUpdate'=>'js:function(id){
$("#pais-grid .select-on-check-all").attr("disabled", true).attr("keys", "");
}',
'selectionChanged'=>'js:function(id){
var keys = $("#pais-grid .select-on-check-all").attr("keys");
var sels = $("#" + id).yiiGridView("getSelection")
var ext = $(sels).not(keys.split(","))
if( $("#"+id+" :checked").size() <= 3 ) //<-- this is your variable number, you can use javascript value
$("#pais-grid .select-on-check-all").attr("keys", sels.join(","));
else
$("#pais-grid .select-on-check[value="+ext[0]+"]").click().prop("checked",false);
//your code here, if you need more.
}',
'columns'=>array(
array(
'class'=>'CCheckBoxColumn',
'selectableRows'=>null,
),
'id',
'nombre',
'codigo',
),
));
这对我有用...很好,在 google chrome 上测试过 对不起,我的英语,我的母语是西类牙语
关于php - Yii:根据动态数量限制cgridview中cCheckboxColumn下的复选框选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150132/