2 Stimmen

Klick auf den Link in Firefox entdecken

Ich möchte in meiner Firefox-Erweiterung erkennen, ob ein Link angeklickt wurde. Bisher habe ich dafür einen Click-Event-Listener zum Fenster hinzugefügt

  window.addEventListener("click", function(event) { handleWindowClick(event); }, false);

  ...

  handleWindowClick : function(event)  {
    if ("event.target is a link") {
      // do something
    }
  };

Bei einigen Links ist das event.target einfach die URL. Für einige Links erhalte ich jedoch z.B. ein HTMLSpanElement als event.target. Bin ich auf dem richtigen Weg, um Linkklicks zu erfassen, oder gibt es andere Möglichkeiten? Wenn es auf diese Weise funktioniert, wie kann ich sicherstellen, dass der Test erfolgreich ist, wenn der event.targer ein Link ist?

2voto

Pastor Bones Punkte 6935

Sie fügen dem Hauptfenster einen Ereignislistener hinzu, der jeden Klick registriert. Die Url's, mit denen Sie Probleme haben, müssen in eine <span> Tag. Was Sie brauchen, ist Veranstaltungsdelegation

1voto

Tomas Punkte 54613

Warum setzen Sie den Click-Event-Listener nicht einfach auf Anker ( <a> )?

var hrefs = document.getElementsByTagName('a');

for (i = 0; i < hrefs.length; i++) {
    hrefs[i].addEventListener(...)
    ...
}

oder in jQuery :

$('a').click(function () {
    ...
});

1voto

dku.rajkumar Punkte 18148

Schauen Sie sich das an, ich hoffe, es ist das, wonach Sie suchen.

window.addEventListener("click", function(event) {
    handleWindowClick(event);
}, false);

function handleWindowClick(event){
   var origEl = event.target || event.srcElement;
    if(origEl.tagName === 'A')
       alert("anchor link is clicked");
    else if(origEl.parentNode.tagName === 'A')
         alert("clicked inside anchor");
    else if(origEl.tagName === 'SPAN')
        alert("span  is clicked");
}

fiddle : http://jsfiddle.net/5zXkN/3/

0voto

Christian Punkte 3040

Ich habe die Antwort von dku.rajkumar erweitert, um beliebige Konstrukte innerhalb von "A"-Tags zu unterstützen. Ich gehe einfach den Baum hinauf, bis ich entweder ein "A" finde oder an der Wurzel bin (also in diesem Fall keinen Link angeklickt habe). Das scheint den Trick zu machen. Vielen Dank an alle für Ihre Hilfe!

 window.addEventListener("click", function(event) { handleWindowClick(event); }, false);
 ...

 isLink : function(element) {
   if(element.tagName === 'A')
     return true;
   else 
     if (element.parentNode) 
       return this.isLink(element.parentNode)
     else
       return false;
 },

 handleWindowClick : function(event) {
   var element = event.target || event.srcElement;
   var isLink = this.isLink(element);
   if (isLink) 
     dump("A link has been clicked.\n");
 },

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X