2010-07-06 5 views
13

Je suis en train de mettre en œuvre une fonction sur jquery datatable, qui retourne la 1ère et la 4ème colonne d'une ligne sélectionnéeJQuery DataTable cellule d'une rangée cliquez

je suis suivant cet exemple, ce qui me permet de manipuler un cliquée ligne http://datatables.net/examples/api/select_single_row.html

penser que je peux changer ce gestionnaire pour effectuer les procédures de valeur de la cellule de lecture et d'utiliser la valeur de ma propre logique

/* 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'); 
}); 

Je suis venu aussi sur ce petit segment de code fr om forum dataTable 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()); 
}); 

peut avoir un pointeur i pour que je puisse obtenir le 1er et 4ème colonne du champ cliqué?

partie suivante je résolus ci-dessus, merci nick

mais j'ai la prochaine partie du problème. quand j'initialiser le tableau j'utilise

/* 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 
      }); 
     } 
    }); 

mon servlet prend un paramètre de requête dir et renvoie une liste à la datatable comme réponse JSON. Comment puis-je ajouter et obtenir une réponse Serlvet avec demande de post afin que je puisse avoir ma table mise à jour?

Répondre

25

Vous pouvez utiliser .delegate() plus facile ici, comme ceci:

$("#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

Avec .delegate()this fait référence à la <tr> puisque c'est le clic nous manipuler, ce qui rend les choses tout à fait un peu plus propre .. et il est toujours un seul gestionnaire d'événements au niveau <tbody>, pas un par <tr>.

+0

une autre question de suivi. si je voudrais passer la valeur dans la grille pour la mettre à jour, comment je devrais le faire pour utiliser la fonction de poste pour mettre à jour la table à la volée? – nokheat

+0

@nokheat - Comment voulez-vous dire? Si vous pouvez décrire un peu plus d'où viennent les valeurs et je vais peut-être pouvoir aider ... Je dois planter pour la nuit, mais répondez ici et je vais vérifier dans la matinée :) –

+0

je dois montrez un segment de code donc référez-vous s'il vous plaît à mon nouveau edit – nokheat

0

Cela devrait faire l'affaire, si je lis votre code correctement:

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

Il devrait revenir le premier et le quatrième enfant de tous les éléments tr avec la classe row_selected.

+0

Je vérifie mon code et votre solution mais j'essaie toujours de contourner ce problème. le convern principal est, puis-je vraiment prendre une référence de l'entrée du gestionnaire? comme $ ("# exemple tbody"), et utiliser l'identifiant this pour obtenir la référence de la cellule et donc sa valeur? – nokheat