2011-01-10 16 views
5

Spójrz ten kod:docelowa na kliknięcia

<div> 
    <a href = "#"><span>Click me MAN !</span></a> 
</div> 

<script type = "text/javascript"> 
    window.onload = function() { 
     document.body.addEventListener ("click", function (event) { 
      var target = event.target; 

      alert ("Returns \"" + target.nodeName + "\". Just want \"" + target.parentNode.nodeName + "\"") 
     }, false); 
    } 
</script> 

Można zobaczyć elementu „rozpiętość” wewnątrz „link”, gdy „Link” jest kliknięty obecny cel jest ten sam „rozpiętość”. W jaki sposób "event.target" może zwrócić "link" zamiast "span".

Dzięki i nie, nie chcę używać "parentNode".

+4

Dlaczego dokładnie słyszysz kliknięcie na ciele zamiast kierowania tylko na znacznik zakotwiczenia? –

+0

@Matt: Warto zmniejszyć liczbę procedur obsługi zdarzeń do minimum i wykorzystywać fakt, że większość zdarzeń powoduje pojawienie się drzewa DOM, technikę znaną jako * delegowanie zdarzeń *. Być może właśnie to robi OP. –

Odpowiedz

7

W swoim podejściu, albo trzeba ręcznie przechodzić w górę DOM aż trafisz element <a> lub dołączyć słuchacza do połączenia się i korzystania this.

Minimalizowanie liczby detektorów zdarzeń jest generalnie dobrym pomysłem, więc oto przykładowy sposób przechodzenia przez DOM. Zauważ, że detektor zdarzeń nie będzie działał w IE, który nie obsługuje metody addEventListener() metody węzłów DOM.

żywo przykład: http://jsfiddle.net/timdown/pJp4J/

function getAncestor(node, tagName) { 
    tagName = tagName.toUpperCase(); 
    while (node) { 
     if (node.nodeType == 1 && node.nodeName == tagName) { 
      return node; 
     } 
     node = node.parentNode; 
    } 
    return null; 
} 

document.body.addEventListener("click", function(event) { 
    var target = getAncestor(event.target, "a"); 
    if (target !== null) { 
     alert(target.nodeName); 
    } 
}, false); 
0

nie można po prostu użyć

<span><a href="#">Click me</a></span> ? 
+0

Jaki jest zatem punkt przęsła? Staje się całkowicie bezużyteczny. –

+0

Jak się masz? Style, które się na niej znajdują, są nadal aktualne dla zawartości linku ... – Cray

1

Dodaj wskazówki to CSS JavaScript. Dostaniesz event.target, który chcesz.

Powiązane problemy