1

チェックボックスの選択を許可する 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);

});');
4

1 に答える 1

1

yii フレームワークは、必要な制御方法を提供していませんが、グリッド上の JavaScript を使用して制御できます。

この方法でテストします。

  1. 全選択行を無効にします。yii 1.10 ではこれを javascript で行う必要がありますが、yii 1.11 では CCheckBoxColumn クラスの headerTemplate を使用できます。
  2. ステップ 1 と同様に、ajax の更新を制御します。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でテストされました、すみません、私の英語は私の母国語です

于 2012-10-31T04:44:53.057 に答える