2011-11-03 2 views
0

J'ai un clic lié en direct à un élément. Le gestionnaire retourne faux après l'exécution, mais si l'élément se trouve être une balise A, le lien est également pas suivi, ce qui est inacceptable ...jquery live return false sur A tags

$('*').live('click', function(){ 
    // lots of code here 
    return false; 
}); 

Maintenant, si l'élément qui est cliqué sur a un chemin comme A>img et l'image est cliquée, le A ne sera jamais suivi. Je ne veux pas que l'événement click soit propagé plus loin.

Comment puis-je y parvenir?

Edit:

Il est essentiel pour ma demande de lier l'événement à *. En outre, les clics peuvent être faits sur n'importe quel élément, pas seulement sur A. Ainsi, aucune des solutions mentionnées ne convient à ce que je souhaite réaliser.

+0

votre code retourne false à la fin aucune action ne sera exécutée et vous l'exécuter à tous les éléments '*' – run

Répondre

0

Je ne lierait pas une fonction de clic pour *. Vous pouvez le lier à l'élément body; le clic se propagera à partir de l'élément sur lequel l'élément body a été cliqué. Vous pouvez vérifier l'élément qui a été initialement cliqué comme ceci:

$("body").live("click", function (e) { 
    if ($(e.originalEvent.target).is("a")) { 
     return false; 
    } 
}); 

Cela dit, vous pouvez toujours le faire:

$("*").live("click", function() { 
    if ($(this).is("a") == false) { 
     return false; 
    } 
}); 
0

Essayez:

if($(this).tagName == 'A') 
    return true; // perhaps even { do nothing } 
else 
    return false; 

Cela pourrait ne pas être le code exact pour obtenir le tagname, voir ce How to extend jQuery to make it easier to retrieve the tagName.

Voir aussi ceci: http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/

+1

this.tagName ou this.nodeName suffira – jerjer

+0

Voir la sous-section stopPropagation() sous "Alors qu'est-ce que vous voulez vraiment?" dans le deuxième lien que j'ai mis là-haut. Je pense que c'est peut-être ce que vous cherchez, mais comme l'a dit Bryan Ross, vous ne voulez probablement pas vous attacher à tous les objets DOM. Merci d'avoir éclairci ça, jerjer. –

2

Qu'est-ce que vous cherchez est preventDefault()

$('*').live('click', function(e){ 
    // lots of code here 
    e.preventDefault(); 
    return false; // Don't think this is necessary 
}); 

Je voudrais aussi dire que la fixation d'un événement à tous les éléments est probablement pas une bonne idée.

Vous seriez mieux servis en se fixant aux balises A spécifiquement:

$('a').click(function(e){ 
    // lots of code here 
    e.preventDefault(); 
    return false; 
}); 
Questions connexes