2009-05-28 3 views
8

Ich habe so ein Stück html:Span innen Anker mit Ereignis sprudelnden

<li class="addToFriends"><a href="....">Something something<span>INSIDE SPAN</span>something</a></li> 

AJAX Anfrage zu bearbeiten, wenn sie auf Anker klicken Ich habe mich registriert Handler auf Click-Ereignis:

$('.addToFriends a').click(function(event){ 
    var target = $(event.target); 
    if (target.is('a')) { 
       // if I click on SPAN element following fragment won't execute! 


     // do ajax request 
    }  
    event.preventDefault(); 
}); 

Meine Fragen sind :

  • warum click event für span element ausgelöst wird? Schließlich bin ich Click-Ereignis nicht an SPAN-Elemente gebunden
  • abgesehen von der vorherigen Frage, dachte ich, dass, wenn ich SPAN Klickereignis behandeln wird, Browser Event-Bubbling Click-Ereignis für Anker zu erhöhen (wenn ich gewonnen habe Rufen Sie nicht event.stopPropagation() auf. Aber ich habe auch nicht für mich arbeiten, wie das Click-Ereignis nur einmal
  • angehoben

So, jetzt habe ich dazu gekommen, dass Problem, das ich meine Lösung ist:

$('.addToFriends a').click(function(event){ 
    var target = $(event.target); 
    if (!target.is('a')) { 
     target = target.parent('a') 
    } 
      ... 
}); 

aber immer noch, ich bin neugierig, warum es so funktioniert ...

Danke,

Paweł

+0

Vielen Dank für Hilfe. Nach den genannten Artikeln ist alles kristallklar. Und anstatt auf ** e.target ** zu verweisen (was sich ändern kann), beziehe ich mich auf ** this ** (was immer Anker ist). – dragonfly

+0

Danke, ich werde genauer in Spezifikation und Artikel schauen. Wie auch immer, du könntest diese Frage beantworten:> warum Klick-Event für den Bereich > Element ausgelöst wird? Schließlich bin ich nicht gebunden > Ereignis zu SPAN-Elemente klicken, weil, vor allem das ein Problem für mich ist. – dragonfly

Antwort

11

Sie haben die current Ihrer Veranstaltung zu nutzen.

$('.addToFriends a').click(function(event){ 
    event.currentTarget;  
    ... 
}); 
+0

Wenn ich diese Antwort genauer gelesen hätte, hätte ich bemerkt, dass Sie vorgeschlagen haben, currentTarget anstelle von target zu verwenden. Das war die Lösung an sich. Wie clusmy von mir :) – dragonfly

1

Ok, aber wenn ich auf SPAN klicken und rufen stopPropagation() -Methode meinen Code in dieser Form nicht funktionieren:

$('.addToFriends a').click(function(event){ 
    var target = $(event.target); 
    if (target.is('a')) { 
     // do ajax request 
     event.stopPropagation();    
     event.preventDefault(); 
    } 

});

Immer noch, ich, ich vermisse einige wichtige Punkte im Zusammenhang mit Event Blubbern.

1

Sie können immer die lesen. Ein nettes Tutorial ist auch verfügbar here.

StopPropagation hat nur dann eine Bedeutung, wenn Sie Click-Event-Handler für die Elemente SPAN und A definiert haben. Durch den Aufruf der stopPropagation im SPAN-Event-Handler wird verhindert, dass der A-Handler aufgerufen wird. Dies setzt die Standard-Bubble-Phase voraus.