2012-11-30 13 views
8

abbiamo una tabella nella nostra pagina, con poche righe e un pulsante di attivazione personalizzato alla fine. la tabella viene caricata tramite html nella pagina, non tramite json.dati jquery: aggiornare la cella della tabella dopo il clic del pulsante

ora, il pulsante di commutazione ai post finali di un servizio e imposta lo stato successivo di tale record nel database.

tuttavia, dovrebbe anche effettuare un aggiornamento a un'altra cella in quella riga. tuttavia sono sicuro che non dovrei farlo manualmente tramite jquery ma tramite i datatables?

$('#tblFollow').dataTable({ 
    sDom: "t", 
    aoColumns: [ 
     null, 
     null, 
     null, 
     { bSortable: false } 
    ] 
}); 

$('#tblFollow').on('click', 'a.follow', function(e){ 
    $(this).toggleClass('active'); 

    // updating column 'following' here... 
    // but this only changes visually, and not the inner datatables data used for sorting 
    var followingCell = $(this).parents('td').prev(); 
    var txt = followingCell.text() == "1" ? "0" : "1"; 
    followingCell.text(txt); 

    return false; 
}); 

manual example: ora ho un esempio, dove a cambiare i campi manualmente, ma questo è visiva, il datatable utilizza ancora i suoi dati interni per l'ordinamento. Quindi sto cercando un modo per farlo meglio

risposta

14

Ecco una possibile soluzione:

Oltre al codice è necessario aggiornare i dati DataTable come segue

var rowIndex = table.fnGetPosition($(this).closest('tr')[0]); 
var aData = table.fnGetData(rowIndex ); 
aData[2] = txt; //third column 

Qui il jsfiddle

e ancora meglio soluzione sarebbe usare fnUpdate per aggiornare i dati e display nello stesso tempo

Qui il jsfiddle

// update column following here... 
var followingCell = $(this).parents('td').prev(); 
var txt = followingCell.text() == "1" ? "0" : "1"; 

var rowIndex = table.fnGetPosition($(this).closest('tr')[0]); 
table.fnUpdate(txt, rowIndex , 2); 

Inoltre, invece di noi

var followingCell = $(this).parents('td').prev(); 
var txt = followingCell.text() == "1" ? "0" : "1"; 

uso

var aData = table.fnGetData(rowIndex ); 
aData[2] //use it to check if the value is 0 or 1 
+0

che funziona come un fascino. scusa l'ottimizzazione che hai fatto alla fine, per verificare il valore su aData invece che sul testo della cella, non era necessario ma interessante. L'ho usato solo nel mio esempio jsFiddle ... il mio codice conosceva già il testo dalle proprietà dei dati sul pulsante. ma non volevo complicare troppo il jsFiddle. ancora interessante. Grazie. – Sander

+0

Attenzione, questa soluzione sembra funzionare solo con i dataTable legacy. In dataTables 1.10.7 utilizzo 'table.cell (targetCellSelector) .data (" new text "). Draw();'. –

Problemi correlati