Php Yii:根据动态编号限制cgridview中CCHECKBOX列下的复选框选择
我有一个cgridview,它有一个ccheckboxcolumn,允许选择复选框。 但是,我想限制一个人可以基于动态值选择的复选框的数量 我做了一些研究,这就是我所做的。但它似乎不起作用。有人能帮忙吗 我的代码如下: cgridview-ccheckbox列:Php Yii:根据动态编号限制cgridview中CCHECKBOX列下的复选框选择,php,javascript,yii,Php,Javascript,Yii,我有一个cgridview,它有一个ccheckboxcolumn,允许选择复选框。 但是,我想限制一个人可以基于动态值选择的复选框的数量 我做了一些研究,这就是我所做的。但它似乎不起作用。有人能帮忙吗 我的代码如下: cgridview-ccheckbox列: $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'v-grid', 'dataProvider'=>$dataProvi
$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" : ""',
),
),
));
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);
});');
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:
$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" : ""',
),
),
));
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进行控制 通过以下方式进行测试:
'afterAjaxUpdate'=>'js:function(id){
$("#pais-grid .select-on-check-all").attr("disabled", true).attr("keys", "");
}',
步骤3
$this->widget('zii.widgets.grid.CGridView',数组(
'id'=>'pais-grid',
“dataProvider”=>$dataProvider,
'selectableRows'=>2,/'js:function(id){
$(“#pais grid.select on check all”).attr(“disabled”,true).attr(“keys”,true);
}',
'selectionChanged'=>'js:function(id){
var keys=$(“#pais grid.select on check all”).attr(“keys”);
var sels=$(“#”+id).yiiGridView(“getSelection”)
var ext=$(sels).not(key.split(“,”))
if($(“#“+id+”:checked”).size()yii框架没有提供所需的控制方式,但可以使用网格上的一些javascript进行控制
通过以下方式进行测试:
禁用select all rows,在yii 1.10中,您需要使用javascript执行此操作,但在yii 1.11中,您可以在CCheckBoxColumn类中使用headerTemplate
控制ajax更新,与步骤1类似,如果使用yii 1.11,请避免此步骤
控制selectionChange,大量javascript
第一步
步骤2
论CGridView
'afterAjaxUpdate'=>'js:function(id){
$("#pais-grid .select-on-check-all").attr("disabled", true).attr("keys", "");
}',
步骤3
$this->widget('zii.widgets.grid.CGridView',数组(
'id'=>'pais-grid',
“dataProvider”=>$dataProvider,
'selectableRows'=>2,/'js:function(id){
$(“#pais grid.select on check all”).attr(“disabled”,true).attr(“keys”,true);
}',
'selectionChanged'=>'js:function(id){
var keys=$(“#pais grid.select on check all”).attr(“keys”);
var sels=$(“#”+id).yiiGridView(“getSelection”)
var ext=$(sels).not(key.split(“,”))
if($(“#“+id+”:checked”).size()我使用的是yii版本1.1.10。我尝试过使用你的方法,但它不起作用,我仍在想原因。如果我的cgridview被呈现到cjuidialog而不是普通页面中,它会影响代码吗?“$”(“#pais grid.on check[value=“+ext[0]+]”)选择。单击().prop(“checked”,false)和“$”()#pais grid.select on check all“).attr(“keys”,sels.join(“,”)的意思是?这个var sels=$(“#”+id).yiiGridView(“getSelection”)
get all selected id rows,这个var keys=$(“#pais grid.select on check all”).attr(“keys”)
在这个点击事件之前获取所有的id行。这个var ext=$(sels)不是吗(keys.split(“,”)
您可以获得之前未选择的所有id行,然后当您获得限制(在本例中为3)时,您需要取消选择(为什么取消选择,因为cgridwiev总是选择)。如何取消选择,这里的代码:$(“#pais grid.select on check[value=“+ext[0]+”)”)。单击().prop(“checked”,false)
我使用的是yii版本1.1.10。我尝试过使用你的方法,但它不起作用,我还在想原因。如果我的cgridview被呈现到cjuidialog而不是普通页面中,它会影响代码吗?“$”(“#pais grid.select on check[value=“+ext[0]+”)。单击().prop(“checked”,false);“$”(“#pais grid.select on check all”).attr(“keys”,sels.join(“,”);”的意思是?这个var sels=$(“#“+id”).yiiGridView(“getSelection”)
get all selected id rows,这个var keys=$(“#pais grid.select on check all”).attr(“keys”)
在这个点击事件之前获取所有的id行。这个var ext=$(sels)。不是(keys.split(“,”)
您可以获取以前未选择的所有id行,然后当您获得限制(在本例中为3)时,您需要取消选择(为什么取消选择,因为cgridwiev总是选择)。如何取消选择,这里的代码:$(“#pais grid.select on check[value=“+ext[0]+”)。单击().prop(“checked”,false);