Considere o seguinte:
<div onclick="alert('you clicked the header')" class="header">
<span onclick="alert('you clicked inside the header');">something inside the header</span>
</div>
Como posso fazer para que, quando o usuário clicar no intervalo, ele não dispara o div
evento de clique?
javascript
html
events
dom
Sam
fonte
fonte
event
parece estar disponível também em eventos embutidos no IOS Safari.Existem duas maneiras de obter o objeto de evento de dentro de uma função:
Se você precisar dar suporte a navegadores herdados que não seguem as recomendações do W3C, geralmente dentro de uma função você usaria algo como o seguinte:
que verificaria primeiro um e depois o outro e armazenaria o que fosse encontrado na variável de evento. No entanto, em um manipulador de eventos embutido, não há um
e
objeto a ser usado. Nesse caso, você deve tirar proveito daarguments
coleção que está sempre disponível e se refere ao conjunto completo de argumentos passados para uma função:No entanto, de um modo geral, você deve evitar manipuladores de eventos em linha se precisar de algo complicado, como interromper a propagação. Escrever seus manipuladores de eventos separadamente e anexá-los a elementos é uma idéia muito melhor a médio e longo prazo, tanto para facilitar a leitura quanto a manter a manutenção.
fonte
onclick="foo(event)"
, em seguida, na funçãofunction foo(event){/* do stuff with event */}
. Isso funciona nos modelos de eventos IE e W3C.Lembre-se de que o window.event não é suportado no FireFox e, portanto, deve ser algo parecido com:
Ou você pode usar o padrão W3C para FireFox:
Se você quiser ser chique, faça o seguinte:
fonte
<div onclick="myEventHandler(event);">
e.cancelBubble
retorna falso no IE! Não pode alcançar ae.cancelBubble = true;
instrução. Em vez disso, use a condição do SoftwareARM !!Use esta função, ele testará a existência do método correto.
fonte
Eu tive o mesmo problema - caixa de erro js no IE - isso funciona bem em todos os navegadores, tanto quanto eu posso ver (event.cancelBubble = true faz o trabalho no IE)
fonte
Isso funcionou para mim
fonte
Para páginas da Web do ASP.NET (não MVC), você pode usar o
Sys.UI.DomEvent
objeto como invólucro do evento nativo.ou, passe o evento como um parâmetro para a função interna:
e em alguma função:
fonte
De acordo com esta página , no IE você precisa:
event.cancelBubble = true
fonte
Como não posso comentar por causa do Karma, escrevo a resposta como um todo: De acordo com a resposta de Gareth (var e = argumentos [0] || window.event; [...]) usei esse oneliner on-line no onclick para um hack rápido:
Sei que é tarde, mas queria que você soubesse que isso funciona em uma linha. Os chavetas retornam um evento que tem a função stopPropagation anexada nos dois casos, então tentei encapsulá-los entre chavetas, como no if e .... funciona. :)
fonte
Isso também funciona - No link HTML, use onclick com retorno como este:
E então a função comfirmClick () deve ser como:
fonte
confirm
não é relevante. Estou me referindo ao valor de retorno . citação: No link HTML, use onclick com retorno como estePor que não apenas verificar qual elemento foi clicado? Se você clicar em algo,
window.event.target
será atribuído ao elemento que foi clicado e o elemento clicado também poderá ser transmitido como argumento.Se o destino e o elemento não forem iguais, foi um evento que se propagou.
fonte
fonte
A melhor solução seria lidar com o evento por meio de uma função javascript, mas para usar uma solução simples e rápida usando o elemento html diretamente e uma vez que o "event" e o "window.event" sejam descontinuados e não sejam universalmente suportados ( https://developer.mozilla.org/pt-BR/docs/Web/API/Window/event ), sugiro o seguinte "código rígido":
fonte