Sé que esta pregunta es un poco polvorienta, pero recientemente tuve una necesidad de esta funcionalidad y encontré lo que considero una forma mucho más limpia de hacerlo.
En lugar de adjuntar un evento a cada casilla, ¿por qué no utilizar los eventos onSelectRow
y onSelectAll
de jqGrid? Cuando se selecciona una fila, verifique si nuestra lista de filas seleccionadas incluye esta fila (basada en la identificación). Agréguelo a la lista si no estaba allí y ha sido seleccionado, elimínelo si estaba allí y ya no está seleccionado. Si se seleccionan todas las filas, repítalas.
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);
}
},
....
)};
Espero que esto ayude a los demás a buscar una solución.