2011-01-17 1 views

risposta

3

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.

0

Suppongo che vorresti fare selezionare alcune righe in una pagina, quindi andare in un'altra pagina, magari selezionare altre righe e mantenere tutte quelle selezionate.

È necessario gestire gli eventi di selezione su ciascuna casella di controllo. Allegare un gestore di eventi a each $("#cb_my_grid") e mantenere una matrice di elementi selezionati. Quindi quando hai bisogno dei dati (magari quando la pagina viene inviata) puoi inviare i valori nella matrice.