So che questa domanda è piuttosto polverosa, ma di recente ho avuto bisogno di questa funzionalità e ho trovato quello che considero un modo molto più pulito per farlo.
Invece di collegare un evento a ogni casella di controllo, perché non utilizzare gli eventi onSelectRow
e onSelectAll
di jqGrid? Quando viene selezionata una riga, controlla se la nostra lista di righe selezionate include questa riga (in base all'id). Aggiungilo alla lista se non era lì ed è stato selezionato, rimuovilo se era lì e non è più selezionato. Se tutte le righe sono selezionate, scorrere attraverso di esse.
var $grid = jQuery("#myGrid");
var updateIdsOfSelectedRows = function (id, isSelected) {
var contains = idsOfSelectedRows.contains(id);
if (!isSelected && contains) {
for(var i=0; i<idsOfSelectedRows.length; i++) {
if(idsOfSelectedRows[i] == id) {
idsOfSelectedRows.splice(i, 1);
break;
}
}
}
else if (!contains) {
idsOfSelectedRows.push(id);
}
};
$grid.jqGrid({
....
onSelectRow: function(rowid, status){
updateIdsOfSelectedRows(rowid, status);
},
onSelectAll: function (aRowids, status) {
var i, count, id;
for (i = 0, count = aRowids.length; i < count; i++) {
id = aRowids[i];
updateIdsOfSelectedRows(id, status);
}
},
....
)};
Spero che questo aiuti gli altri a cercare una soluzione.