Php Yii:根据动态编号限制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

我有一个cgridview,它有一个ccheckboxcolumn,允许选择复选框。 但是,我想限制一个人可以基于动态值选择的复选框的数量

我做了一些研究,这就是我所做的。但它似乎不起作用。有人能帮忙吗

我的代码如下:

cgridview-ccheckbox列:

$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进行控制

通过以下方式进行测试:

  • 禁用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框架没有提供所需的控制方式,但可以使用网格上的一些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);