2009-04-23 5 views
0

Wie kann ich innerhalb der Funktion fireAlert() auf das Element verweisen, das es aufgerufen hat, ohne this als Argument über den Link übergeben zu müssen?Wie kann ich das Element, das das Ereignis enthält, von der aufgerufenen Funktion referenzieren?

<script type="text/javascript"> 

//function 
function fireAlert(){ 
    alert(); 
} 

</script> 

<a href="javascript:;" onclick="fireAlert();">Fire</a> 
+0

Ich verwende YUI. Bis jetzt hat keine der Antworten für mich funktioniert. –

Antwort

1

Es gibt einfachere Wege, dies mit jQuery zu tun, aber das ist, wie es ohne es fertig ist:

UPDATE: Bitte versuchen Sie den folgenden HTML/Javascript-Code. Beachten Sie, dass ich das onclick-Ereignis innerhalb von window.onload anhefte, anstatt es als Attribut am Element anzugeben.

In diesem Beispiel füge ich das Ereignis an alle Anker-Tags auf der Seite an, aber Sie könnten getElementsByTagName durch getElementById für ein bestimmtes ersetzen.

<html> 
    <head> 
     <script language="javascript"> 
     function fireAlert(e) 
     { 
      var whoCalled = e ? e.target : event.srcElement; 

      alert(whoCalled.innerHTML); 
     } 
     window.onload=function() 
     { 
      var allHrefs = document.getElementsByTagName("a"); 
      for(i=0;i<allHrefs.length;i++) 
      { 
       allHrefs[i].onclick=fireAlert; 
      } 
     } 
     </script> 
    </head> 
    <body> 
     <a href="#">Hello #1</a> 
     <a href="#">Hello #2</a> 
     <a href="#">Hello #3</a> 
     <a href="#">Hello #4</a>   
    </body> 
</html> 
+0

Ist srcElement nicht nur für IE spezifisch? – hbw

+0

Das ist richtig. Ich habe meinen Beitrag aktualisiert, um das zu berücksichtigen. –

+0

Diese Lösung funktionierte weder in FF noch in IE7. "window.event ist undefiniert". Mit Firebug kann ich kein Objekt namens event finden. Ich bin in der Lage, das Onclick-Ereignis mit seinem zugehörigen Element im Stapel (in Firebug) zu finden, aber ich weiß nicht, wie ich das im Code referenzieren soll. –

0

Wie Jose sagte, wäre es mit jQuery einfach.

$(document).ready(function() 
{ 
    $("a").click(function() 
    { 
     // this == the clicked element 
    }); 
}); 
+0

Ich benutze YUI. Wenn es also einen einfachen Weg mit YUI gäbe, würde das auch funktionieren. –

Verwandte Themen