rookie: Verwendung von "this"

Erstmal guten Tag!

Seit Tagen quält mich (JavaScript-Anfänger) folgende Frage:


function test(e) {
    	var input = document.getElementById("input1");
    	input.value = e.text;
    }


<a href="#" onclick="test(this)">Link 1</a>
<a href="#" onclick="test(this)">Link 2</a>

<form>
	<input type="text" id="input1" name="input1" value="Wert">
</form>

Aus welchem Grund bezieht sich das Schlüsselwort "this", welches der Funktion übergeben wurde, im Internet Explorer(<=8) auf das Fenster-Objekt und nicht auf das HTML-Element(a)? Ich benötige "this" in jedem Fall, um herauszufinden, welchem Element das Event zugeordnet ist, um bspw. den Text auszulesen.

  1. this ist schon dein A-Element, nur hat das keine Eigenschaft text.
    Nimm innerHTML.

    1. this ist schon dein A-Element, nur hat das keine Eigenschaft text.
      Nimm innerHTML.

      Das Link-Objekt hat die Eigenschaft "text", mit welcher der Text des Verweises ausgelesen werden kann (http://de.selfhtml.org/javascript/objekte/links.htm#text)
      Obiges Beispiel funktioniert in allen modernen Browsern, abgesehen vom IE(<=8).

      1. Das Link-Objekt hat die Eigenschaft "text", mit welcher der Text des Verweises ausgelesen werden kann

        Glaub es oder glaub es nicht.

        http://de.selfhtml.org/javascript/objekte/links.htm#text

        Ich sehe dort keinen IE.
        http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-48250443

        Obiges Beispiel funktioniert in allen modernen Browsern, abgesehen vom IE(<=8).

        Aber da geht es nunmal nicht. Und der IE7 ist ein moderner Browser?

        1. Das Link-Objekt hat die Eigenschaft "text", mit welcher der Text des Verweises ausgelesen werden kann
          Glaub es oder glaub es nicht.

          Ich werde abschwören und konvertieren :-)

          http://de.selfhtml.org/javascript/objekte/links.htm#text
          Ich sehe dort keinen IE.
          http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-48250443

          Das hast Du verdammt nochmal recht :-)

          Obiges Beispiel funktioniert in allen modernen Browsern, abgesehen vom IE(<=8).
          Aber da geht es nunmal nicht. Und der IE7 ist ein moderner Browser?

          Deshalb das Wörtchen "abgesehen".

          Jedenfalls funktioniert es mit "innerHTML".
          Vielen Dank für Deine Hilfe!

          Interessant finde ich, dass, wenn man "this" respektive "e" im IE per "alert()" ausgibt, die URL des Fensters erhält. Bei Verwendung von innerHTML jedoch der Text des HTML-Elements (a) ausgelesen wird.

          Meine Lernkurve ist eben noch ziemlich flach ...

          1. Obiges Beispiel funktioniert in allen modernen Browsern, abgesehen vom IE(<=8).
            Aber da geht es nunmal nicht. Und der IE7 ist ein moderner Browser?
            Deshalb das Wörtchen "abgesehen".

            Das suggeriert bei mir, daß du einen IE7 mit zu den modernen Browsern zählst. Die unterstützen zu großen Teilen den kommenden HTML5 Standard. Dort gibt es auch dein text(wozu auch immer).

            Interessant finde ich, dass, wenn man "this" respektive "e" im IE per "alert()" ausgibt, die URL des Fensters erhält.

            alert erwartet einen String. Deswegen wird HTMLAnchorElement.toString() aufgerufen.

            1. Achso, das meinst du.
              Ein Fragment ohne Bezeichner (also nur #) verweist einfach auf deine aktuelle URL.
              Daher ist das hier vermutlich sowieso unsinnig das href anzugeben.

              1. Hallo,

                Achso, das meinst du.
                Ein Fragment ohne Bezeichner (also nur #) verweist einfach auf deine aktuelle URL.
                Daher ist das hier vermutlich sowieso unsinnig das href anzugeben.

                nicht immer. Es springt zurück zum Seitenanfang.
                In diesem Fall aber schon, wobei es hier kein a-Element sein sollte, sonder eher ein Button.

                Grüße

                • Steffen
  2. Hallo,

    Aus welchem Grund bezieht sich das Schlüsselwort "this", welches der Funktion übergeben wurde, im Internet Explorer(<=8) auf das Fenster-Objekt und nicht auf das HTML-Element(a)?

    Das würde mich sehr wundern. Das hat schon im IE4 funktioniert, soweit ich mich erinnere…

    Ich habe es im IE8 ausprobiert und this zeigt wie erwartet auf das a-Element, nicht auf das globale window-Objekt. Bist du dir sicher?

    Grüße,
    Mathias