Eu tenho uma div à qual eu anexei um onclick
evento. nesta div há uma tag com um link. Quando clico no link, oonclick
evento da div também é acionado. Como posso desativar isso para que, se o link for clicado na divonclick
não seja acionado?
roteiro:
$(document).ready(function(){
$(".header").bind("click", function(){
$(this).children(".children").toggle();
});
})
Código HTML:
<div class="header">
<a href="link.html">some link</a>
<ul class="children">
<li>some list</li>
</ul>
</div>
$(".header a")
com$(".header *")
e obteve qualquer criança selecionada (div, formulários, entrada, etc).rel
Luz configurado para a funçãoOu, em vez de ter um manipulador de eventos extra para impedir outro manipulador, você pode usar o argumento Event Object passado para o manipulador de eventos click para determinar se um filho foi clicado.
target
será o elemento clicado ecurrentTarget
será a div .header:fonte
currentTarget
. Uma solução alternativa é substituí-lo porthis
, como sugerido em outra resposta .Melhor maneira usando on () com encadeamento como,
fonte
As respostas aqui levaram a pergunta do OP muito literalmente. Como essas respostas podem ser expandidas para um cenário em que há MUITOS elementos filhos, não apenas um
<a>
tag? Aqui está uma maneira.Digamos que você tenha uma galeria de fotos com um fundo escuro e as fotos centralizadas no navegador. Ao clicar no plano de fundo preto (mas não em nada dentro dele), você deseja que a sobreposição seja fechada.
Aqui está um possível HTML:
E aqui está como o JavaScript funcionaria:
Isso interromperá os eventos de clique dos elementos internos
.contents
de todas as pesquisas,.gallery
para que a galeria seja fechada apenas quando você clicar na área de fundo preto desbotada, mas não quando você clicar na área de conteúdo. Isso pode ser aplicado a muitos cenários diferentes.fonte
Eu me deparei com essa pergunta, procurando outra resposta.
Eu queria impedir que todas as crianças acionassem os pais.
JavaScript:
jQuery:
fonte
Ou isto:
fonte
return false
ao link, ele deve ser clicável.A solução mais simples é adicionar esse CSS aos filhos:
fonte
Uma maneira mais curta de fazer isso:
fonte