Wiem, że to pytanie jest zakurzone, ale ostatnio potrzebowałem tej funkcji i znalazłem to, co uważam za znacznie bardziej czysty sposób.
Zamiast dołączać zdarzenie do każdego z pól wyboru, dlaczego nie należy używać zdarzeń o wartości jqGrid w postaci onSelectRow
i onSelectAll
? Po wybraniu wiersza sprawdź, czy lista wybranych wierszy zawiera ten wiersz (na podstawie identyfikatora). Dodaj go do listy, jeśli go tam nie było i został wybrany, usuń go, jeśli był tam i nie jest już wybrany. Jeśli wszystkie wiersze są zaznaczone, wykonaj ich iterację.
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);
}
},
....
)};
Mam nadzieję, że pomaga to innym osobom szukającym rozwiązania.