Tentando entender a função jQuery ".not ()" e encontrando um problema. Eu gostaria que o div pai fosse "clicável", mas se um usuário clicar em um elemento filho, o script não será chamado.
$(this).not(children()).click(function(){
$(".example").fadeOut("fast");
});
o html:
<div class="example">
<div>
<p>This content is not affected by clicks.</p>
</div>
</div>
e.stopPropagation();
vez dereturn false;
nesse caso.}).find('.classes-to-ignore').click(function(e) {
para escolher os elementos filho específicose.stopPropagation()
e depois usarreturn false
.return false
é equivalente a,e.preventDefault(); e.stopPropagation()
portanto, pode ter efeitos colaterais inesperados.Estou usando a seguinte marcação e havia encontrado o mesmo problema:
Aqui eu usei a seguinte lógica:
Em termos da pergunta exata, posso ver que funciona da seguinte maneira:
ou, é claro, o contrário:
Espero que ajude.
fonte
.on("click", ...)
nas versões recentes do jQuery, pois.live()
está obsoleto desde a v1.7. Veja api.jquery.com/liveOu você também pode fazer:
fonte
Minha solução:
fonte
Pessoalmente, adicionaria um manipulador de cliques ao elemento filho que não fazia nada além de interromper a propagação do clique. Então, seria algo como:
fonte
stopPropagation
e retornar falso como outras respostas sugerem?stopPropagation
pode ser mais limpo, pois não impedirá a ocorrência de eventos em elementos filho, o que pode acontecer comreturn false
.Aqui está um exemplo. O quadrado verde é pai e o quadrado amarelo é elemento filho.
Espero que isso ajude.
fonte