Yii:根据动态数字限制cgridview中cCheckboxColumn下的复选框选择

时间:2012-10-31 01:44:43

标签: php javascript yii

我有一个带有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);

});');

1 个答案:

答案 0 :(得分:1)

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

以这种方式测试:

  1. 禁用select-all行,在yii 1.10中你需要用javascript做这个,但在yii 1.11中你可以在CCheckBoxColumn类中使用headerTemplate
  2. 控制ajax更新,类似于步骤1,如果使用yii 1.11,请避免此步骤
  3. 控制selectionChange,很多javascript ......
  4. 第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',
    ),
    )); 
    

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