Я знаю, что этот вопрос довольно пыльный, но недавно мне понадобилась эта функция, и я нашел способ, который я считаю гораздо более чистым.
Вместо того, чтобы прикреплять событие к каждому флажку, почему бы не использовать onSelectRow
и onSelectAll
события jqGrid? Когда строка выбрана, проверьте, включает ли наш список выбранных строк эту строку (на основе идентификатора). Добавьте его в список, если он не был там и был выбран, удалите его, если он был там и больше не выбран. Если выбраны все строки, выполните их итерацию.
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);
}
},
....
)};
Надеюсь, это поможет другим, ищущим решение.