2010-09-28 4 views
1

Aidez-moi à comprendre comment définir un événement sur l'élément parent (<tr>) Je ne peux pas trouver l'erreur dans l'étatComment définir un événement sur l'élément parent en utilisant jQuery

<script type="text/javascript"> 
$('table tbody tr').each(function(){ 
    $(this).find('a:first').click(function(){ 
     if($(this).parents().get(1).tagName == 'TR') { 
     $(this).parents().get(1).find('tr').css('background', 'red'); //What's wrong? 
     } 
}); 
</script> 

<table> 
    <tbody> 
     <tr> 
     <td><a href="#">text</a></td> 
     <td>text</td> 
     </tr> 
    </tbody> 
</table> 

Malheureusement, la mise en forme, je ne vois aucune étiquette plus spéciale

+0

Qu'obtenez-vous si vous 'console.log' ou' alert ($ (this) .parents(). Get (1)) '? –

Répondre

1

hé il vous manque la fermeture }); pour each déclaration. Voici la version correcte de votre code

$('table tbody tr').each(function(){ 
    $(this).find('a:first').click(function(){ 

      if($(this).parents().get(1).tagName == 'TR') { 
       $($(this).parents().get(1)).css("background-color", 'red'); //What's wrong? 
      } 
     });  
}); 

Working Example

EDIT: vous pouvez raccourcir le code ci-dessus très facilement comme l'attribution d'une classe à balise d'ancrage.

<a class="bindclick" href="#"></a> 

$(".bindclick").bind("click", function(){ 
    var parent = $(this).parents("tr").get(0); 
      OR 
    var parent = $(this).closest("tr"); // http://api.jquery.com/closest/ 
    $(parent).css("background-color","red"); 
}); 
0

Edit: Cela fonctionne:

$(function() { 
    $('tr a:first').click(function() { 
    $(this).parents('tr:first').css({background:'red'}); 
    }); 
}); 
+0

Je ne pense pas que cela fonctionnera. Le parent est un '' – Marko

+1

oui, cela fonctionnera, le problème est que, [.parents()] (http://api.jquery.com/parents/) bulle jusqu'à la racine. ce qui signifie que si cette table est imbriquée, tous ses parents TR de 'a: first' seront affectés. – Reigel

+0

+1 Je suis d'accord avec reigel. vous devez ajouter .get (0) après les parents ("tr") et l'insérer comme sélecteur jQuery comme '$ ($ (this) .parents ('tr'). get (0)). css ...' –

1
$('table tbody tr').each(function(){ 
    var $this = $(this); 
    $this.find('a:first').click(function(){ 
     $this.css('background', 'red'); 
    }); 
}); 

crazy demo

1
$("table tr a:first").click(function() { 
    $(this).closest("tr").css('background', 'red'); 
}); 
+0

+1 c'est une bonne approche. –

0

Pas tout à fait sûr, mais je pense que lorsque vous appelez $ (ce) dans la seconde fonction pour cliquer la balise, $ (this) est la balise elle-même, et non pas le $ (this) qui est dans la fonction externe l'élément tr.

0
$('table tbody tr').each(function(){ 
      var $this = $(this); 
      $this.find('a:first').click(function(){ 
      $this.css('background', 'red'); 
     }); 
}); 
0
$('table tbody tr').each(function(){ 
    $(this).find('a:first').click(function(){ 
     $(this).css('background', 'red'); 
    }); 
}); 

facile.

Questions connexes