2011-11-25 14 views
11

Sto tentando di inserire i pulsanti in JQuery DataTables ma sembra che quando si preme il pulsante, non accade nulla.Inserisci pulsanti su DataTable Le celle non funzionano

il codice come segue (per la JQuery Datatable):

  var oTable = $('#example').dataTable({ 
       "aaData": movieclips, 
       "bProcessing": true, 
       "bAutoWidth": false, 
       "fnInitComplete": function() { 
           var oSettings = this.fnSettings(); 
           for (var i=0 ; i<oSettings.aoPreSearchCols.length ; i++){ 
            if(oSettings.aoPreSearchCols[i].sSearch.length>0){ 
             $("tfoot input")[i].value = oSettings.aoPreSearchCols[i].sSearch; 
             $("tfoot input")[i].className = ""; 
            } 
           } 
          }, 
       "aoColumns": [ 
        { 
         "sTitle": "Title", 
         "sClass": "center", 
         "sWidth": "80%" 
        }, 
        { 
         "sTitle": "Video URL", 
         "sClass": "center", 
         "fnRender": function(obj) { 
          var sReturn = obj.aData[ obj.iDataColumn ]; 
          var returnButton = "<input class='approveButton' type='button' name='" + sReturn + "' value='Play'></input>"; 
          return returnButton; 
         }, 
         "sWidth": "20%" 
        } 
       ] 
      }); 

La funzione approveButton come segue:

 $(".approveButton").click(function() { 
      alert(this.name); 

      try { 
       alert(this.name); 
      } finally { 
       return false; 
      } 
     } 

Qualsiasi Insight?

risposta

8

Se si assegna il gestore con $(".approveButton").click(...) essa si applica solo agli elementi che già esistono, che corrispondono al selettore di ".approveButton" in quel momento. Cioè, gli elementi creati in seguito non riceveranno automaticamente i gestori. Sto assumendo che questo è il problema - se non è possibile ignorare le seguenti ...

Fortunatamente c'è un meccanismo per la creazione di un gestore che funzionerà automaticamente su elementi che vengono creati in futuro corrispondenza:

$(document).on("click", ".approveButton", function() { 
    // your function code here 
}); 

si noti che il selettore iniziale è document - questo funzionerà, ma si dovrebbe impostarlo su un elemento genitore più vicino ai vostri pulsanti, se è possibile, quindi forse il seguente:

$("#example").on("click", ".approveButton", function() { /* your code */ }); 

(io sono non sono sicuro se "#esempio" è il genitore più adatto per questo scopo, ma non mostrare nessuno del tuo codice HTML, quindi ...)

Dai un'occhiata a the jQuery doco for .on() per ulteriori informazioni.

Oppure, se si sta utilizzando una versione di jQuery di età superiore a 1.7 è possibile utilizzare `.delegate()'

+0

Contrassegnato correttamente in quanto le informazioni erano abbastanza complete. Se incluso il live() di Nicola, sarebbe perfetto. –

+0

Grazie. Non ho menzionato ['.live()'] (http://api.jquery.com/live/) perché '.delegate()' è un'opzione migliore a meno che tu non sia ancora su una versione <1.4.2, ma suppongo che 1.4.2 fosse meno di due anni fa, quindi versioni precedenti sono probabilmente ancora in uso. Oh beh, è ​​stato menzionato ora ... – nnnnnn

+0

+1, chiaro come una giornata di sole: D –

3

Se si utilizza jQuery < 1.7 si deve usare delegate() o dal vivo()

$(".approveButton").live('click', function() { 
     alert(this.name); 

     try { 
      alert(this.name); 
     } finally { 
      return false; 
     } 
    } 

    $("body").delegate(".approveButton", "click", function() { 
     alert(this.name); 

     try { 
      alert(this.name); 
     } finally { 
      return false; 
     } 
    } 

altrimenti utilizzare on() come suggerito da nnnnnn

+0

+1 per suggerire il live() per jquery <1.7. –

Problemi correlati