2015-11-03 72 views
0

我使用Yii,我有這個CGridView這裏有CCheckBoxColumn所定義的列的一部分。限制的Yii CGridView可選擇行復選框列

this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $dataProvider, 
    'filter' => $model, 
    'columns' => $columns 
    ), 
    'selectableRows'=>2 
)); 

設置selectableRows 2使得點擊GridView控件內該行的任何部分「選中/取消選中」該行也。這是一個有用的功能,以便用戶不再需要特別勾選複選框圖標,如果它非常小。

不幸的是我只需要在點擊,而不是在該行的任何其他列中的複選框圖標/輸入元件本身或至少柱它是在限制複選框滴答爲切換。看起來這個功能還沒有完成,或者我不知道如何覆蓋Js來實現這個功能,但我不知道從哪裏開始。謝謝。

回答

0

'columns'您應該添加作爲這樣的第一個元素的新數組:

array(
     'class' => 'CCheckBoxColumn', 
     'id'=>'selectableColumn', 
     'selectableRows'=>2, 
    ), 

,並從數組索引'selectableRows'刪除。這個數組是帶有複選框的列的配置。所以,基本上,你應該添加上面提到的$columns變量數組。下面是例子:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $dataProvider, 
    'filter' => $model, 
    'columns' => array(// <- this is your $columns variable! 
     array(// <- just add this array to your $columns var 
      'class' => 'CCheckBoxColumn', 
      'id'=>'selectableColumn', 
      'selectableRows'=>2, 
     ), 
     'columnName1', 
     'columnName2', 
     ... 
    ), 
)); 
0

你可以在你的代碼覆蓋JS,見下面的例子爲同:

代碼停止click事件的傳播對電網tr

Yii::app()->clientScript->registerScript('tr-event-propagation', '$(".grid-view tr").click(function(event){ 
    event.stopPropagation(); 
});'); 

列碼數組添加行中的複選框

array(
    'class' => 'CCheckBoxColumn', 
    'selectableRows' => null, 
    'htmlOptions' => array(
         'onclick' => 'js: $(this).find("input").trigger("click")' 
        ), 
    'checkBoxHtmlOptions' => array(
          'onclick' => 'js: $(this).trigger("click")' 
          ), 
    'selectableRows' => 2 
), 

希望這個解決方案將他lp的你

注:使用其他event.stopPropagation();可能斷裂的JavaScript綁定TR

+0

的TR或其他元素我有同樣的問題。我加你的解決方案,但它給我'太多的遞歸調用 \t 的(舊= ELEM; CUR; CUR = cur.parentNode){ \t'錯誤。我在控制檯中檢查過它。 – Dhara

+0

@Jazz你需要檢查什麼其他事件與網格tr –

+0

沒有其他事件綁定。但如果通過添加ony''selectableRows'=> 1解決了這個問題''。我不添加其他的東西。它工作完美。這是否正確? – Dhara