2011-08-26 79 views
6

我有一個在我的JqGrid中從數據庫加載的複選框列,所以它被檢查或不加載時加載。JQgrid複選框onclick更新數據庫

我想要的是:如果複選框正在被用戶選中或取消選中,我想更新數據庫中的相同。我不希望用戶按下輸入或任何東西。只有一次點擊並向DB發送動作

name:'Aktiv',index:'Aktiv',width:100,edittype:'checkbox',align:'center',formatter:「checkbox」,editable:true, formatoptions:{禁用:假}

回答

16

您可以設置一個click事件處理程序的loadComplete內:

loadComplete: function() { 
    var iCol = getColumnIndexByName ($(this), 'Aktiv'), rows = this.rows, i, 
     c = rows.length; 

    for (i = 1; i < c; i += 1) { 
     $(rows[i].cells[iCol]).click(function (e) { 
      var id = $(e.target).closest('tr')[0].id, 
       isChecked = $(e.target).is(':checked'); 
      alert('clicked on the checkbox in the row with id=' + id + 
       '\nNow the checkbox is ' + 
       (isChecked? 'checked': 'not checked')); 
     }); 
    } 
} 

其中

var getColumnIndexByName = function(grid, columnName) { 
    var cm = grid.jqGrid('getGridParam', 'colModel'), i, l; 
    for (i = 1, l = cm.length; i < l; i += 1) { 
     if (cm[i].name === columnName) { 
      return i; // return the index 
     } 
    } 
    return -1; 
}; 

取而代之的alert應該使用jQuery.ajax向服務器發送有關更新複選框狀態的信息。

您可以看到演示here

+0

完美的工作,現在我需要弄清楚如何發送動作進一步到我的控制器,它將發送到數據庫進一步。哦,我認爲我現在得到它 – Timsen

+0

謝謝!謝謝! – jose

+0

@ jose:不客氣! – Oleg

1

loadComplete:function()中的一個小錯誤。 在演示中,您可以發現,即使在複選框被選中後,如果您在該單元格的複選框外單擊,該值將從「true」更改爲「false」。

爲了避免這種情況,只需通過執行以下操作,僅將焦點對準複選框。

for (i = 1; i < c; i += 1) { 
    $(('input[type="checkbox"]'),rows[i].cells[iCol]).click(function (e) { 
     var id = $(e.target).closest('tr')[0].id, 
      isChecked = $(e.target).is(':checked'); 
     alert('clicked on the checkbox in the row with id=' + id + 
       '\nNow the checkbox is ' + 
       (isChecked? 'checked': 'not checked')); 
    }); 
} 

,並感謝您的回答:-)(@Oleg)幫我當然..的lot..in時間;)

+0

這似乎不起作用。使用此代碼時,點擊事件不會觸發。請指教。 – NewHistoricForm

0

要改變基於複選框

的點擊其他列的值
var weightedAvgPriceIndex = getColumnIndexByName($(this), 'WeightedAveragePrice'), 
    rows = this.rows, 
    i, 
    c = rows.length; 

for (i = 1; i < c; i += 1) { 
    $(('input[type="checkbox"]'),rows[i].cells[iCol]).click(function (e) { 
     var id = $(e.target).closest('tr')[0].id; 
     isChecked = $(e.target).is(':checked'); 
     var x = $('#' + id + ' td:eq(' + weightedAvgPriceIndex + ')').text(); 
     $('#' + id + ' td:eq(' + weightedAvgPriceIndex + ')').text(Math.abs(x) + 10); 
    }); 
}