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

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

});');

最佳答案

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

这对我有用...很好,在 google chrome 上测试过 对不起,我的英语,我的母语是西类牙语

关于php - Yii:根据动态数量限制cgridview中cCheckboxColumn下的复选框选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150132/

相关文章:

php - 高级搜索、PHP 和 MySQL

javascript - 提取 Google Analytics Campaign Cookie 信息并插入查询表单字段。这可能吗?

twitter-bootstrap - 如何从 yii 中的 bootstrap 复选框按钮中获取值?

php yii 框架对象问题

php - 如何调试此错误 : Property "CDbAuthManager.connectionId" is not defined

php - 检查url是否包含参数

php - codeigniter 中的 XSS 过滤不能防止 SQL 注入(inject)吗?

php - 如何在 PHP html5 上传中获取服务器响应

javascript - 我如何禁用 Angular ui Timepicker 中的分钟输入

javascript - 使用 mongodb 更新多个文档