Samuel Vogel: Startelement auslesen

Hallo,

Ich hab schon bei SelfHTML gesucht aber nicht das richtige gefunden.
Ich hab nen Link und bei mouseover wird ne JS Funktion aufgerufen.
Wie kann jetzt die Funtkion feststellen aus welchem a Objekt sie aufgerufen wurde?

mfg samy,

  1. Hi,

    Ich hab nen Link und bei mouseover wird ne JS Funktion aufgerufen.
    Wie kann jetzt die Funtkion feststellen aus welchem a Objekt sie aufgerufen wurde?

    Gar nicht - es sei denn, beim Aufruf wurde dieses (this) Objekt als Parameter mitgeliefert.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hallo!

    Also zwei Möglichkeiten fallen mir auf Anhieb ein:

    1. Du übergibst wie MudGuard ja bereits erwähnt hat das Element beim Aufruf. Also z.B. onMouseOver="MyFunction(this)".

    2. (Nur IE) Es existiert das Event-Objekt.<C:\Programme\SelfHTML\javascript\objekte\event.htm>. In SelfHTML sind nur einige wenige abfragbaren Eigenschaften aufgelistet.
    Hier findest Du mehr: http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/obj_event.asp
    Also kannst Du mittels event.fromElement das auslösende Element des Events abfragen.
    Ich sehe gerade, daß das event-Objekt eine Empfehlung für DOM level 2 ist, also bleibt es dir überlassen, das auch mal in anderen Browsern zu testen.

    Gruß

    WebFix

    1. Gude,

      Ich übergebe jetzt einfach den die id an die Funktion aber:
      Warum geht das hir 'document.all.button.offsetHeight' nur wennn ich das wo jetzt button steht nur wenn ich die id hinschreibe? ich hätte gerne dass die id da per Variable eingesetz wird!

      mfg samy,

      1. Hi,

        Ich übergebe jetzt einfach den die id an die Funktion aber:

        das ist nicht einfach, sondern umständlich. Jetzt musst Du Dir die Objektreferenz erst suchen, die Du direkt hättest übergeben können.

        Warum geht das hir 'document.all.button.offsetHeight'

        Also, wenn bei Dir der Fall vorliegt, dass Du nur den IE 4 beachten musst, dann solltest Du das schon in der ursprünglichen Frage erwähnen.

        nur wennn ich das wo jetzt button steht nur wenn ich die id hinschreibe? ich hätte gerne dass die id da per Variable eingesetz wird!

        Ich verstehe kein Wort, kann Dir aber sagen, dass dieser Gedankengang hinfällig ist.

        Cheatah

        --
        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: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Ich übergebe jetzt einfach den die id an die Funktion aber:

          das ist nicht einfach, sondern umständlich. Jetzt musst Du Dir die Objektreferenz erst suchen, die Du direkt hättest übergeben können.

          Versteh ich nicht! Es wurde doch gesagt dass es anders nicht geht, als die id an die Funktion zu übergeben. (Der Opera Browser übergibt wenn ich this benutze den Pfad zu Datei aufm Server!

          Warum geht das hir 'document.all.button.offsetHeight'

          Also, wenn bei Dir der Fall vorliegt, dass Du nur den IE 4 beachten musst, dann solltest Du das schon in der ursprünglichen Frage erwähnen.

          Muss ich nicht!

          nur wennn ich das wo jetzt button steht nur wenn ich die id hinschreibe? ich hätte gerne dass die id da per Variable eingesetz wird!

          Ich verstehe kein Wort, kann Dir aber sagen, dass dieser Gedankengang hinfällig ist.

          Nein der ist nicht hinfällig! Und ich meinte warum kann ich dem hier: 'document.all.-->button<--.offsetHeight' nicht bei button ne Variable übergeben die die id des Ziel Objekts entält!

          Und sorry für meine schlechte Ausdrucksweise!

          mfg samy,

          1. Hi,

            Versteh ich nicht!

            was genau verstehst Du nicht?

            Es wurde doch gesagt dass es anders nicht geht, als die id an die Funktion zu übergeben.

            Wurde es? Wer immer das Tat: Es ist falsch.

            (Der Opera Browser übergibt wenn ich this benutze den Pfad zu Datei aufm Server!

            Das kann gar nicht sein, weil ein HTTP-Client keine Chance hat, die Verzeichnisstruktur auf einem Server zu ermitteln. Nach meiner Beobachtung verhält sich Opera im Zusammenhang mit 'this' korrekt.

            Warum geht das hir 'document.all.button.offsetHeight'
            Also, wenn bei Dir der Fall vorliegt, dass Du nur den IE 4 beachten musst,
            Muss ich nicht!

            Warum verwendest Du dann Code, der nur bei IE 4 Sinn macht?

            Ich verstehe kein Wort, kann Dir aber sagen, dass dieser Gedankengang hinfällig ist.
            Nein der ist nicht hinfällig!

            Doch, ist er.

            Und ich meinte warum kann ich dem hier: 'document.all.-->button<--.offsetHeight' nicht bei button ne Variable übergeben die die id des Ziel Objekts entält!

            Aha, danke. Das hat WebFix mittlerweile - als einer von sehr, sehr vielen in diesem Forum - erklärt.

            Cheatah

            --
            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: No
            X-Please-Search-Archive-First: Absolutely Yes
          2. Hi,

            (Der Opera Browser übergibt wenn ich this benutze den Pfad zu Datei aufm Server!

            Hm. Seltsam:

            <script style="text/javascript">
            function blubb(bla)
            {
            alert(bla);
            bla.style.display="none";
            }
            </script>
            <a href="" onclick="blubb(this);return false;">clicktest</a>

            zeigt im alert tatsächlich die URL.
            Aber die Style-Anweisung läßt den Link verschwinden.

            cu,
            Andreas

            --
            MudGuard? Siehe http://www.Mud-Guard.de/
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Hi,

              zeigt im alert tatsächlich die URL.

              Und zwar nicht die URL des aktuellen Dokuments, sondern des Dokuments, auf das das href-Attribut des Links verweist.

              cu,
              Andreas

              --
              MudGuard? Siehe http://www.Mud-Guard.de/
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            2. Hallo,

              Hm. Seltsam:

              <script style="text/javascript">
              function blubb(bla)
              {
              alert(bla);
              bla.style.display="none";
              }
              </script>
              <a href="" onclick="blubb(this);return false;">clicktest</a>

              zeigt im alert tatsächlich die URL.
              Aber die Style-Anweisung läßt den Link verschwinden.

              Das a-Elementobjekt hat Eigenschaften vom Location-Objekt (http://de.selfhtml.org/javascript/objekte/location.htm, alert(location.constructor) im Mozilla), also z.B. protocol. Wie window.location hat bla einen value, daher verhält es sich wie ein String, ohne String-Eigenschaften (wie length) oder String-Methoden (wie substring) zu besitzen. alert(typeof bla.constructor) wird (zumindest im Mozilla) wie erwartet [HTMLAnchorElement] ausgeben. Es wird also kein String übergeben, sondern tatsächlich das das Elementknoten-Objekt. Daher funktioniert auch der Zugriff auf style. Das ist eine seltsame Konstruktion, weil sie sich nicht nachvollziehen lässt:

              var x = new Object('beispielwert');
              alert(x);
              alert(x.valueOf());
              alert('typ: ' + typeof(x));
              alert('konstruktor: ' + x.constructor);
              alert('substring: ' + typeof(x.substring));

              Der Konstruktor ist unweigerlich String, was nach ECMAScript auch logisch erscheint. Die a-Elementknoten und window.location sind also Sonderfälle, die wahrscheinlich zur Abwärtskompatibilität noch funktionieren.

              Mathias

      2. Gude,

        Ich übergebe jetzt einfach den die id an die Funktion aber:
        Warum geht das hir 'document.all.button.offsetHeight' nur wennn ich das wo jetzt button steht nur wenn ich die id hinschreibe? ich hätte gerne dass die id da per Variable eingesetz wird!

        mfg samy,

        Das ist einfach:

        function AufrufBeiOnMouseOver(Elem_ID) {
          document.all[Elem_ID].offsetWidth ...
        ...

        Noch eins: Du weißt hoffentlich daß das mit "document.all" nur für IE und Opera funcktioniert... (ansonsten getElementById() verwenden)

        Gruß

        WebFix

        1. Hallo,

          OK danke. Im gegensatz zu Cheatah hast du nicht gemotzt sondern es mir erklärt! Danke.

          mfg samy,

          1. Hi,

            OK danke. Im gegensatz zu Cheatah hast du nicht gemotzt sondern es mir erklärt! Danke.

            im Gegensatz zu meinen Beiträgen hat WebFix Dir zwar geantwortet, aber nicht geholfen.

            Cheatah

            --
            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: No
            X-Please-Search-Archive-First: Absolutely Yes
    2. Entschuldigung, da hab ich wohl etwas versaubeutelt und den lokalen Link bei mir angegeben...
      Der MS-Link ist ausnahmsweise hier auch hilfreicher. Also einfach die Klammern und das "link:" weglassen. (Komisch, daß er das jetzt nicht als Link anzeigt?!)

      WebFix

      1. Hi,

        Also einfach die Klammern und das "link:" weglassen. (Komisch, daß er das jetzt nicht als Link anzeigt?!)

        das liegt daran, dass Du keine gültige URL angegeben hast: Die Slashes sind im Query-String nicht erlaubt.

        Cheatah

        --
        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: No
        X-Please-Search-Archive-First: Absolutely Yes
    3. Hallo,

      1. (Nur IE) Es existiert das Event-Objekt.

      Also kannst Du mittels event.fromElement das auslösende Element des Events abfragen.

      fromElement beinhaltet den Elementknoten, von dem die Maus bei einem mouseover-Event *kam*, nicht den, dem der mouseover-Event passierte. Das steht auch auf der verlinkten Seite. srcElement wäre passender.

      Ich sehe gerade, daß das event-Objekt eine Empfehlung für DOM level 2 ist, also bleibt es dir überlassen, das auch mal in anderen Browsern zu testen.

      Bei onmouseover="bla()" hat die Funktion keine Möglichkeit, an das Event-Objekt zu kommen. window.event ist nach wie vor eine Microsoft-Erfindung. DOM 2 Events kennt strenggenommen nur addEventListener, womit die Zuweisung außerhalb eines onmouseover-Attributs erfolgen muss.

      Mathias

  3. Hallo,

    Ich hab nen Link und bei mouseover wird ne JS Funktion aufgerufen.
    Wie kann jetzt die Funtkion feststellen aus welchem a Objekt sie aufgerufen wurde?

    Leider auch nur im IE zu gebrauchen ist die Eigenschaft sourceIndex, mit der man über getElementsByTagName("*") den jeweiligen Elementknoten ausfindig machen kann. In diesem Beispiel werden die Links nach dem Anklicken ueber eine Funktion rot gefaerbt:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Test by TM 09/04</title>
    <script language="JavaScript" type="text/javascript">
    <!--

    var d;

    function Init()
    {
      d=document.getElementsByTagName("*");
    }

    function Test(idx)
    {
      alert(idx);
      d.item(idx).style.color="#F00";
    }

    //-->
    </script>
    </head>
    <body onload="Init()">
    <a href="test1.htm" onclick="Test(this.sourceIndex);return false">Test 1</a>
    <a href="test2.htm" onclick="Test(this.sourceIndex);return false">Test 2</a>
    <a href="test3.htm" onclick="Test(this.sourceIndex);return false">Test 3</a>
    </body>
    </html>

    MfG, Thomas