1

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

我研究了一下,这就是我所做的。但这似乎不起作用。任何人都可以帮忙吗?

我的代码如下:

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" : ""', 
            ),
        ),
));

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);

});');
4

1 回答 1

1

yii 框架不提供您需要的控制方式,但您可以使用网格上的一些 javascript 进行控制。

以这种方式测试:

  1. 禁用全选行,在 yii 1.10 中您需要使用 javascript 执行此操作,但在 yii 1.11 中您可以使用 CCheckBoxColumn 类中的 headerTemplate
  2. 控制ajax更新,和第1步类似,如果使用yii 1.11,避免这一步
  3. 控制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',
),
)); 

这项工作对我来说......很好,在谷歌浏览器上测试过,原谅我的英语,我的母语是西班牙语

于 2012-10-31T04:44:53.057 回答