2010-07-06 15 views
13

Ich versuche, eine Funktion auf jquery Datentabelle zu implementieren, die die erste und die vierte Spalte einer geklickt Zeile zurückgibtJQuery Datatable-Zelle aus einer Reihe klicken

Ich folge diesem Beispiel, das mir erlaubt, eine klickten zu manipulieren Reihe http://datatables.net/examples/api/select_single_row.html

denken, dass ich diese Prozedur ändern können die gelesenen Zellenwert Verfahren zu tun und den Wert auf meine eigene Logik verwenden

/* Add a click handler to the rows - this could be used as a callback */ 
$("#example tbody").click(function(event) { 
    $(oTable.fnSettings().aoData).each(function(){ 
     $(this.nTr).removeClass('row_selected'); 
    }); 
    $(event.target.parentNode).addClass('row_selected'); 
}); 

ich habe auch mit diesem kleinen Code-Segment fr über om Datatable Forum http://datatables.net/forums/comments.php?DiscussionID=1384&page=1#Item_0

$('#example tbody tr').click(function() { 
    // Alert the contents of an element in a SPAN in the first TD 
    alert($('td:eq(0) span', this).html()); 
}); 

kann ich irgendwelche Zeiger so dass ich die 1. und 4. Spalte des angeklickten Feld bekommen?

nächsten Teil Ich habe die oben gelöst, dank Nick

aber ich den nächsten Teil des Problems haben. wenn ich die Tabelle init i verwenden

/* Init the table */ 
    oTable = $('#filetable').dataTable({ 
     "bProcessing": true, 
     "bServerSide": true, 
     "sAjaxSource": "/crvWeb/jsonFileList.do", 
     "fnServerData": function (sSource, aoData, fnCallback) { 
      $.ajax({ 
       "dataType": 'json', 
       "type": "POST", 
       "url": sSource, 
       "data": aoData, 
       "success": fnCallback 
      }); 
     } 
    }); 

mein Servlet ein Verzeichnis Anforderungsparameter nimmt und einen Eintrag der Datentabelle als Json Antwort.

wie kann ich hinzufügen und erhalten serlvet antwort mit post-anfrage so kann ich meine tabelle aktualisiert haben?

Antwort

25

können Sie .delegate() einfachste hier verwenden, wie folgt aus:

$("#example tbody").delegate("tr", "click", function() { 
    var firstCellText = $("td:first", this).text(); 
    var fourthCellText = $("td:eq(3)", this).text(); 
}); 

You can try out a demo here

Mit .delegate()this bezieht sich auf die <tr> denn das ist der Klick wir Handhabung, die Dinge ziemlich viel sauberer .. und es ist immer noch nur ein Ereignishandler auf dem Niveau <tbody>, nicht eins pro <tr>.

+0

eine weitere Folgefrage. Wenn ich den Wert in das Grid übergeben möchte, um es zu aktualisieren, wie sollte ich es tun, um die Funktion von Post zu verwenden, um die Tabelle im laufenden Betrieb zu aktualisieren? – nokheat

+0

@nokheat - Wie meinst du das? Wenn du ein bisschen mehr darüber schildern kannst, woher die Werte kommen und gehen könnte, könnte ich vielleicht helfen ... Ich muss für die Nacht abstürzen, aber antworte hier und ich werde es morgens überprüfen :) –

+0

ich muss zeige einige Codesegmente, also verweise bitte auf meine Neubearbeitung – nokheat

0

Dies sollte es tun, wenn ich den Code gerade lese richtig:

$("tr.row_selected td:nth-child(1), tr.row_selected td:nth-child(4)"); 

Es sollte das erste und das vierte Kind aller tr Elemente mit der Klasse row_selected zurückzukehren.

+0

Ich überprüfe meinen Code und Ihre Lösung, aber ich versuche immer noch, es zu umgehen. Die Hauptkonvertierung ist, kann ich wirklich eine Referenz von der Handler-Eingabe nehmen? Wie $ ("# Beispiel tbody"), und verwenden Sie diese ID, um die Referenz der Zelle und damit ihren Wert zu erhalten? – nokheat