2013-03-08 13 views
8

Il mio datatable sta funzionando bene tranne il fatto che sto cercando di aggiungere una funzionalità dblclick su ogni riga, che funziona parzialmente.Datatables, come associare l'evento su tutte le righe della tabella

Quindi, questo è il mio codice:

oTable = $('#example').dataTable({ 
    "aaSorting": [[ 1, "desc" ]], 
    "bJQueryUI": true, 
    "sPaginationType": "full_numbers" 
}); 

/* Add a click handler to the rows */ 

//This highlights the row selected 
$("#example tbody").click(function(event) { 
     $(oTable.fnSettings().aoData).each(function(){ 
       $(this.nTr).removeClass('row_selected'); 
     }); 
     $(event.target.parentNode).addClass('row_selected'); 
}); 

//this attaches a dblclick event on the row 
$("#example tr").dblclick(function() { 
     var iPos = oTable.fnGetPosition(this); 
     var aData = oTable.fnGetData(iPos); 
     var iId = aData[1]; 
     $('#edit'+iId).click(); //clicks a button on the first cell 
}); 

L'evidenziazione di righe è ok per tutte le righe delle tabelle, ma il dblclick sta lavorando solo per le righe che dove inizialmente reso nella prima pagina. Quando ordino/ricerca dati e i dati visualizzati cambiano, l'evento dblclick non funziona per quelle righe che non sono state visualizzate nella prima pagina.

Qualcuno può aiutare a risolvere questo mistero? Grazie

risposta

17

La prima risposta è quasi perfetta, ma deve avere un piccolo ritocco che impedisce di funzionare.

Come nel apidoc jquery on() si deve aggiungere la [, selector ] come ho fatto sotto con la "tr"

$("#example").on("dblclick", "tr", function() { 
     var iPos = oTable.fnGetPosition(this); 
     var aData = oTable.fnGetData(iPos); 
     var iId = aData[1]; 
     $('#edit'+iId).click(); //clicks a button on the first cell 
}); 
+0

Wowwww u the MAN! Grazie, funziona come dovrebbe ora! – MaVRoSCy

+0

Ma ancora, non l'ho capito! Perché il mio codice iniziale era sbagliato? – MaVRoSCy

+0

Alla pagina api cerca "Eventi diretti e delegati" e leggi tutto. Spero che ti aiuti. – DKSan

1

provare questo

$("#example tbody").on("click",function(event) { 
     $(oTable.fnSettings().aoData).each(function(){ 
       $(this.nTr).removeClass('row_selected'); 
     }); 
     $(event.target.parentNode).addClass('row_selected'); 
}); 


    $("#example tr").on("dblclick",function() { 
      var iPos = oTable.fnGetPosition(this); 
      var aData = oTable.fnGetData(iPos); 
      var iId = aData[1]; 
      $('#edit'+iId).click(); //clicks a button on the first cell 
    }); 

possiamo utilizzare gli eventi direttamente sui dati che caricherà quando la pagina è loading.Othersise abbiamo bisogno di usare su.

+0

nop! ancora non funziona. Anche in questo caso solo le prime righe di pagina sono associate a un evento e non all'intero dataset – MaVRoSCy

2

nel caso in cui avete bisogno di uno scenario diverso, ma simile a legarsi a tutte le classi specifiche all'interno DataTable vedi sotto campione

$("#sample_2 tbody").on("click", "a.ApproveLink", approveLinkHandler); 

considerano anche a seguito doc ufficiale su questo problema:

Uno dei migliori modi di affrontare questo è attraverso l'uso di eventi delegati con jQuery del sul metodo

https://datatables.net/examples/advanced_init/events_live.html

Problemi correlati