Eu tenho uma caixa de seleção que desejo executar alguma ação do Ajax no evento click, no entanto, a caixa de seleção também está dentro de um contêiner com seu próprio comportamento de clique que não quero executar quando a caixa de seleção é clicada. Este exemplo ilustra o que eu quero fazer:
$(document).ready(function() {
$('#container').addClass('hidden');
$('#header').click(function() {
if ($('#container').hasClass('hidden')) {
$('#container').removeClass('hidden');
} else {
$('#container').addClass('hidden');
}
});
$('#header input[type=checkbox]').click(function(event) {
// Do something
});
});
#container.hidden #body {
display: none;
}
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="container">
<div id="header">
<h1>Title</h1>
<input type="checkbox" name="test" />
</div>
<div id="body">
<p>Some content</p>
</div>
</div>
No entanto, não consigo descobrir como parar o evento de bolhas sem causar o comportamento padrão do clique (a caixa de seleção sendo marcada / desmarcada) não seja executada.
Os itens a seguir interrompem a interferência do evento, mas também não alteram o estado da caixa de seleção:
event.preventDefault();
return false;
javascript
jquery
checkbox
events
roryf
fonte
fonte
Respostas:
substituir
com
event.stopPropagation ()
event.preventDefault ()
fonte
.live()
método, isso não funcionará. Você terá que se usarreturn false;
..on()
método jQuery (live agora está obsoleto). Não consegui descobrir por que o retorno falso não estava funcionando.Use o método stopPropagation:
fonte
Não se esqueça do IE:
fonte
Como outros já mencionaram, tente
stopPropagation()
.E há um segundo manipulador para tentar:
event.cancelBubble = true;
É um manipulador específico do IE, mas é suportado em pelo menos FF. Realmente não sei muito sobre isso, pois eu não o usei, mas pode valer a pena tentar, se tudo mais falhar.fonte
Este é um excelente exemplo para entender o conceito de bolhas de eventos. Com base nas respostas acima, o código final será semelhante ao mencionado abaixo. Onde o usuário clica na caixa de seleção, a propagação do evento para o elemento pai 'header' será interrompida
event.stopPropagation();
.fonte
Ao usar o jQuery, você não precisa chamar uma função de parada separadamente.
Você pode simplesmente retornar
false
no manipulador de eventosIsso interromperá o evento e cancelará a interferência.
Veja também event.preventDefault () vs. return false
Nos documentos do jQuery:
fonte
Crédito para @mehras pelo código. Acabei de criar um snippet para demonstrá-lo, porque pensei que seria apreciado e queria uma desculpa para experimentar esse recurso.
fonte
No angularjs, isso deve funcionar:
fonte