我有一个带有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);
});');
答案 0 :(得分:1)
yii框架不提供您需要的控件方式,但您可以使用网格上的一些javascript进行控制。
以这种方式测试:
Yii::app()->clientScript->registerScript('restrictCbSelection','
$(document).ready(function(){
$("#pais-grid .select-on-check-all").attr("disabled", true).attr("keys", "");
});');
在CGridView上
'afterAjaxUpdate'=>'js:function(id){
$("#pais-grid .select-on-check-all").attr("disabled", true).attr("keys", "");
}',
$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',
),
));
这项工作对我来说......非常好,在谷歌浏览器上测试过 借口我的英语,我的母语是西班牙语