2009-08-17 11 views
18

Je veux que mon script mette en surbrillance la ligne que je sélectionne et cela fonctionne bien, mais quand une ligne est sélectionnée/mise en surbrillance je veux qu'elle soit "désélectionnée/désactivée" ligne est sélectionnée. Comment puis-je faire cela?Jquery: Mettre en surbrillance/Dégager la ligne du tableau sur le clic

Voici le code actuel pour sélectionner une ligne, il désélectionne, mais seulement si je clique sur la même ligne à nouveau:

$(".candidateNameTD").click(function() { 
      $(this).parents("tr").toggleClass("diffColor", this.clicked); 
     }); 

Table Html

<table id="newCandidatesTable"> 
    <thead> 
     <tr> 
      <th style="cursor: pointer;">ID</th> 
      <th style="cursor: pointer;">Navn</th> 
      <th style="cursor: pointer;">Email</th> 
      <th></th> 
     </tr> 
    </thead> 
    <tbody> 
    <% foreach (var candidate in Model.Ansogninger) 
    { 
     %> 
      <tr id="<%= candidate.AnsogerID %>" class="newCandidatesTableTr"> 
       <td><div id="candidateID"><%= candidate.AnsogerID %></div></td> 
       <td><div id="<%= "candidateName_" + candidate.AnsogerID %>" class="candidateNameTD"><%= candidate.Navn %></div></td> 
       <td><div id="candidateEmail"><%= candidate.Email %></div></td> 
       <td> 
        <div id="<%= "acceptCandidateButton_" + candidate.AnsogerID %>" class="acceptb" style="cursor: pointer; border: 1px solid black; width: 150px; text-align: center;">Godkend</div> 
       </td> 
      </tr> 
     <% 
    } %> 
    </tbody> 
    </table> 

Répondre

22

Vous pouvez d'abord désélectionner lignes, comme

$(".candidateNameTD").click(function() { 
     $(this).closest("tr").siblings().removeClass("diffColor"); 
     $(this).parents("tr").toggleClass("diffColor", this.clicked); 
    }); 

éditer: yep, sry, mais idée e avait raison;)

+0

Ceci désactive uniquement la ligne sur laquelle vous avez cliqué. –

+0

merci, j'ai utilisé votre idée ... c'était la plus logique pour moi :) – Poku

+1

btw si vous avez des tables imbriquées cela va correspondre à tous les tr. le plus proche est le meilleur – redsquare

6
$(".candidateNameTD").click(function() { 
      $("tr").removeClass("diffColor"); 
      $(this).parents("tr").addClass("diffColor"); 
     }); 
4

Cela affectera seulement la table en cours:

$(".candidateNameTD").click(function() { 
    $('table#newCandidatesTable tr').removeClass("diffColor"); 
    $(this).parents("tr").addClass("diffColor"); 
}); 
0

Meilleur utilisant .live. Un événement est préféré à plusieurs (pensez à la grande table, aux gros frais généraux).

$("div.candidateNameTD").live('click'. function() { 
    var $tr = $(this).closest("tr"); 
    //remove any selected siblings 
    $tr.siblings().removeClass('diffColor'); 
    //toggle current row 
    $tr.toggleClass('diffColor');   
}); 
+0

@redsquare - pas nécessaire sauf s'il ajoute dynamiquement/injecte des lignes. – karim79

+0

c'est s'il a beaucoup de lignes. 1 événement meilleur que 100 – redsquare

Questions connexes