Jak powiedział @adeneo, jeśli korzystasz z pointer-events: none
na potomku, detektor zdarzeń rodzica nie może wiedzieć, czy cel jest sam, czy jego dziecko. To tak, jak po kliknięciu jakiegoś tekstu wewnątrz akapitu, detektor zdarzeń nie może wiedzieć, czy kliknąłeś tekst lub dopełnienie akapitu.
Następnie można użyć
document.getElementById('outer').onclick = function(e) {
/* your code */
};
document.getElementById('outer').addEventListener('click', function(e) {
if(e.target !== this) {
e.stopPropagation();
}
}, true);
BEZ pointer-events: none
.
W ten sposób używasz fazy przechwytywania, więc możesz uniemożliwić wykonywanie programów obsługi zdarzeń dla dzieci (takich jak pointer-events: none
), ale teraz możesz odróżnić, czy użytkownik kliknął twój element lub jego elementy podrzędne.
Demo jsFiddle
Problem: Nie można używać fazy przechwytywania na starych wersjach IE.
Advantage: Ponieważ nie działa na starym IE, nie trzeba się martwić o takie rzeczy jak
e = e || window.event
e.target || e.srcElement
if (e.stopPropagation) { e.stopPropagation(); } else { e.calcelBubble=true; }
Jeśli pokaż nam kod HTML, a wtedy być może pomożemy :) – Archer
Pointer-events nie jest sposobem na wyłączenie elementu, to tylko cance ls wszystkie zdarzenia wskaźnika i jest pomocne, gdy robisz coś, co wymaga zdarzeń wskaźnika na element podrzędny. – adeneo
potrzebujesz e.stopPropagation() – Krishna