heinetz: aObj.onclick = function() {alert(this);}

Hallo Forum,

aObj.onclick = function() {alert(this);}

Hinter dem aObj verbirgt sich ein per JS erzeugtes a-Tag,
auf das ich als Object onclick zugreifen möchte. Sprich
ich hätte mit dem alert() als Ausgabe [Object] erwartet,
wie es bei einem z.B. input wäre. So könnte ich bei einem
input z.B. über den parentNode an das Form kommen. Mein
aObj gibt mir aber [Object Window] aus.

Wie greift man also korrekt auf das a-Tag über this zu ?

danke und

beste gruesse,
heinetz

  1. Jedes Event wird, wenn es nicht innerhalb des Node-Attributs übergeben wird, innerhalb des Scopes von window ausgeführt. "this" ist daher in diesem Fall window.

    Zwischen

    <a onclick="alert(this);"></a>

    und

    <a></a>  
    <script type="text/javascript">
    

    document.getElementsByTagName('a').onclick = function() { alert(this); }
    </script>

    gibt es nun mal doch einen Unterschied.

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      document.getElementsByTagName('a').onclick = function() { alert(this); }

      Du kannst auf nodeLists klicken? :-)

      MfG ChrisB

      --
      „This is the author's opinion, not necessarily that of Starbucks.“
    2. ... ergo: es geht nur über einen Umweg z.B.
      ~~~html imgObj = document.createElement('img');
      imgObj.onclick = function() {alert(this);}
      aObj = document.createElement('a');
      aObj.href = "#"; aObj.appendChild(imgObj);

        
      thanx!									  
      
      
      1. ... ergo: es geht nur über einen Umweg

        Das stimmt nicht.

          							~~~javascript
        

        imgObj = document.createElement('img');

        imgObj.onclick = function() {alert(this);}
        aObj = document.createElement('a');
        aObj.href = "#";
        aObj.appendChild(imgObj);

          
        Ein zusätzliches img-Element sollte nicht nötig sein. Du kannst den click-Handler auch direkt am aObj setzen.  
          
        Wenn das nicht funktioniert, liegt der Fehler wie gesagt woanders und du solltest uns den gesamten relevanten Code zeigen.  
          
        Mathias
        
        -- 
        [JavaScript-Erweiterung für das SELFHTML-Forum](http://forum.de.selfhtml.org/js/doku/)
        
    3. Hi,

      Jedes Event wird, wenn es nicht innerhalb des Node-Attributs übergeben wird, innerhalb des Scopes von window ausgeführt. "this" ist daher in diesem Fall window.

      Aber beide Varianten befinden sich doch "am" Element.

      Zwischen
      <a onclick="alert(this);"></a>
      und

      <a></a>

      <script type="text/javascript">

      `referenzAufAElement.onclick = function() { alert(this); }`{:.language-javascript}  
      
      > `</script>`{:.language-html}  
      > gibt es nun mal doch einen Unterschied.  
        
      Und welcher sollte das bzgl. dessen, worauf this sich bezieht, sein?  
        
      Also das gibt in beiden Faellen den Inhalt des href-Attributes des Links aus (weil dessen toString-Methode nun mal diesen liefert).  
        
      MfG ChrisB  
        
      
      -- 
      „This is the author's opinion, not necessarily that of Starbucks.“
      
  2. aObj.onclick = function() {alert(this);}
    Mein aObj gibt mir aber [Object Window] aus.

    Wie greift man also korrekt auf das a-Tag über this zu ?

    Genau so - mit this.

    Der Fehler muss woanders liegen, denn beim traditionellen Event-Handling wird die Handlerfunktion immer im Kontext des Elementobjektes ausgeführt, dem man den Handler zugewiesen hat.

    Wenn this auf window zeigt, dann wird die Funktion irgendwie aus ihrem Kontext gerissen.

    Mathias