2010-11-10 4 views
3

J'ai un tableau avec tr où vous pouvez cliquer sur. Ces tr peuvent contenir a.Détection de l'élément cliqué sur

<tr id="12" href="/guestbook/edit?id=12"> 
    <td class="main"> 
     <strong>Remi</strong> 
     <a href="mailto:[email protected]">[email protected]</a> 
    </td> 
    <td class="date">05-11-2010 11:34</td> 
    <td class="number">ip</td> 
    </tr> 

Ce code jquery pour détecter le clic sur le tr

$('table tr[href]').click(function(e){ 
    document.location.href = $(this).attr('href'); 
}); 

Lorsque je clique sur l'adresse e-mail par exemple, d'abord mon client e-mail ouvre (ce qui est bon) puis l'édition de page charge (ce qui est mauvais). Est-il possible de détecter l'élément sur lequel j'ai cliqué? Si c'est un A ou un TR?

+0

ne pas utiliser href sur un tr, son mal (le mal que je vous dis!), Vous pouvez, par exemple, utiliser data-href (HTML5) – Hannes

+0

Ok, merci, mais cela ne résout pas le problème. – Nico

+0

ajouter différents écouteurs d'événement à A et TR, alors vous saurez qui est qui. http://jsbin.com/uzivu3/edit –

Répondre

10

Vous pouvez vérifier la .target of the event et de voir ce que son .nodeName est, comme celui-ci:

$('table tr[href]').click(function(e){ 
    if(e.target.nodeName == 'A') return; 
    document.location.href = $(this).attr('href'); 
}); 

Comme @Hannes dit dans les commentaires cependant, il est préférable d'utiliser au moins un attribut de données ici, comme celui-ci :

<tr id="12" data-href="/guestbook/edit?id=12"> 

Puis dans votre code:

$(this).attr('data-href'); 

Ou, en jQuery 1.4.3+:

$(this).data('href'); 
0

Lorsqu'un événement click se produit, il est d'abord déclenché sur l'élément que vous cliquez dessus, puis propagées aux éléments parents, ce qui déclenche leurs gestionnaires onclick. Vous pouvez le faire en addititon le code que vous avez:

$('tr[href] a').click(function(e) { 
    $(e.target).closest('tr[href]').trigger('click'); 
    return false; // stop event propagation (email client won't be called) 
}); 

Mais je vous recommande de supprimer les points d'ancrage de la modifier et de supprimer, parce que vous séduise votre utilisateur de cette façon.

Questions connexes