Jense: Parameterübergabe

Hallo Ihr Spezies,
im folgenden habe ich mein Problem in Kurzfassung "codiert":

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head >

<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
<title>Testseite</title>

<script>

function fOnload()
{
 window["dynamischErzeugteVariable"] = new Array();
 for(i=0;i<10;i++)
 {
  window["dynamischErzeugteVariable"][i] = i;
 }

for(j=0;j<10;j++)
 {
  var vDynamischesDiv = document.getElementById("bodyId").appendChild(document.createElement("div"));
  with(vDynamischesDiv)
  {
   id = "div"+j;
   style.position = "relative";
   style.marginTop = "5px";
   style.width = "20px";
   style.height = "20px";
   style.backgroundColor = "red";
   innerHTML = j;
  }

var vParameter = window["dynamischErzeugteVariable"][j];
  document.getElementById("div"+j).onclick = function() {fTest(vParameter);};

}

}

function fTest(pParameter)
{
 alert(pParameter);
}

</script>
</head>
<body id="bodyId" onload="fOnload();">

</body>
</html>

Ziel ist es (in diesem Demo) das z.B. beim click auf das Div mit der id "div5" ein alert mit "5" erscheint. Es kommt aber immer "9", also der hier letzte erzeugte Div. Es hat wahrscheinlich irgendwas mit der Referenz auf das window-Objekt zu tun...??? Ich google schon den ganzen Tag, aber mir fehlt mal wieder das tiefere Verständnis und damit das know how (parseInt();toString();String() habe ich schon alles probiert). Ich hoffe einer von euch kann mir sagen wie der vParameter aussehen muss oder was zu machen ist damit das funktioniert.

Schon mal vorab vielen Dank.

Jense

  1. Hi,

    <?xml version="1.0" encoding="UTF-8"?>

    das ist gelogen.

    <meta http-equiv=Content-Type content="text/html; charset=UTF-8">

    Dies hier ist HTML und hat mit XML nichts zu tun - auch nicht mit XHTML.

    <script>

    Dies hier ist noch nicht mal HTML, das zwingend benötigte type-Attribut fehlt.

    var vDynamischesDiv = document.getElementById("bodyId").appendChild(document.createElement("div"));

    Woher kommt eigentlich diese Unsitte, DOM-Objekte fast schon zwanghaft über IDs ansprechen zu müssen? Es gibt in einem HTML- oder XHTML-Dokument eine ziemlich genau bekannte Anzahl <body>-Elemente, die dadurch leicht zu finden sind.

    with(vDynamischesDiv)

    Without with, please. Das macht einen klareren Kontext.

    document.getElementById("div"+j).onclick = function() {fTest(vParameter);};
    Ziel ist es (in diesem Demo) das z.B. beim click auf das Div mit der id "div5" ein alert mit "5" erscheint. Es kommt aber immer "9", also der hier letzte erzeugte Div.

    Wenn die onclick-Funktion ausgeführt wird, lautet der Code:

    fTest(vParameter);

    Er wird in genau diesem Moment im Kontext der Funktion, die obige Zuweisung enthält, ausgeführt. Wie lautet - in genau diesem Moment - der Wert der Variablen vParameter in diesem Kontext?

    Es hat wahrscheinlich irgendwas mit der Referenz auf das window-Objekt zu tun...???

    Nein, mit dem Kontext. Schaffe einen neuen.

    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. Salut Cheatah,

      wie immer scharfsinnig und brilliant -
      dafür bist Du hier beliebt und bekannt!

      Aber: glaubst Du der OP kann mit folgenden Aussagen:

      Es gibt in einem HTML- oder XHTML-Dokument eine ziemlich genau bekannte Anzahl <body>-Elemente, die dadurch leicht zu finden sind.

      Nein, mit dem Kontext. Schaffe einen neuen.

      auch nur irgend etwas anfangen?

      Das hier ist weder ironisch, noch sarkastisch gemeint, sondern eine ernste Frage!

      Ich stelle auf keinen Fall, Deine Kompetenz in Frage - denn wie C.S. vor einiger Zeit hier sinngemäß bereits sagte: "Cheatah hat[*] immer recht, man versteht es nur nicht immer gleich".

      Warum an dieser Stelle nicht 5% mehr Hilfe - z.B. ein Link?

      Ich weiß dass Du das drauf hast - das Archiv weiß es auch;)

      [*] fachlich

      au relire

      Sven aus M.

      1. Hi!

        Ich weiß dass Du das drauf hast - das Archiv weiß es auch;)

        Fanboi! :P

        --
        Wenn Du eine Antwort nicht verstehst, trau dich und frag nochmal nach.
         
      2. Hi,

        Ich stelle auf keinen Fall, Deine Kompetenz in Frage - denn wie C.S. vor einiger Zeit hier sinngemäß bereits sagte: "Cheatah hat[*] immer recht, man versteht es nur nicht immer gleich".

        Durch Wiederholung wird es aber nicht richtiger. Cheatah ist auch nur ein Mensch, der sich auch mal irrt. Es fält bei der Anzahl der Belehrungen nur nicht so auf ... ;->

        ...und verglichen mit seinen echten "Böcken", ist, aus der Abwesenheit des TYPE-Attributs auf Nicht-HTML zu schließen (anstatt auf eine spezifische Nicht-HTML-Version - einer *der* "JS-Gurus" empfiehlt übrigens die Verwendung von SCRIPT ohne Attribute), ein wirklich kleiner. :)

        Warum an dieser Stelle nicht 5% mehr Hilfe - z.B. ein Link?
        Ich weiß dass Du das drauf hast - das Archiv weiß es auch;)

        Manche sehen sich gerne, andere hören sich gerne, und wieder andere lesen sich gerne. So what?

        Gruß, Cybaer

        --
        Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
        (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
        1. @@Cybaer:

          ...und verglichen mit seinen echten "Böcken", ist, aus der Abwesenheit des TYPE-Attributs auf Nicht-HTML zu schließen

          'script'-Element ohne 'type'-Attribut widerspricht den Regeln von XHTML 1.0 Transitional. Es liegt also kein XHTML-1.0-Transitional-Dokument vor, wie in der DOCTYPE-Angabe behauptet wird.

          Ein (X)HTML-Dokument ist eines, was den Regeln der jeweiligen(X)HTML-Version/-Variante entspricht. Ist es nicht valide, dann ist es was-auch-immer, aber kein (X)HTML. Natürlich hat Cheatah recht.

          einer *der* "JS-Gurus" empfiehlt übrigens die Verwendung von SCRIPT ohne Attribute), ein wirklich kleiner. :)

          Na und? Wie ich schon einmal anmerkte: „Als JavaScript-Guru kennt er sich mit dem aus, was zwischen dem '>' von '<script.*>' und dem '<' von '</script> steht; nicht notwendigerweise auch mit dem, was links und rechts davon steht.

          Anders gesagt: Man kann durchaus JavaScript-Guru sein, ohne Ahnung von HTML zu haben.“

          Live long and prosper,
          Gunnar

          PS: @Jense

          IEs mit <?xml version="1.0" encoding="UTF-8"?> in den Quirks-Modus zu schicken, ist selten eine gute Idee. [SERVING-XHTML] Lass die XML-Deklaration weg; sie ist bei UTF-8 gar nicht nötig.

          --
          Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
          1. Hallo,

            'script'-Element ohne 'type'-Attribut widerspricht den Regeln von XHTML 1.0 Transitional. Es liegt also kein XHTML-1.0-Transitional-Dokument vor, wie in der DOCTYPE-Angabe behauptet wird.

            Demnach gibts im ganzen Web nahezu kein HTML. Die Geschichte muss neu geschrieben werden: Es ist ein großer Irrtum, dass HTML im Web verwendet würde! Stattdessen baut das Web auf was-auch-immer auf. Ich werde gleich die SELFHTML-Dokumentation umschreiben, um diese Urban Legend auszumerzen. Vielleicht benennen wir SELFHTML um, denn wer kann schon garantieren, dass hier alles HTML und nicht was-auch-immer ist?

            Ist es nicht valide, dann ist es was-auch-immer, aber kein (X)HTML.

            Vielleicht ist es auch einfach nicht valides, nicht standardkonformes, fehlerhaftes HTML.

            Mathias

            1. Hi,

              Demnach gibts im ganzen Web nahezu kein HTML.

              richtig.

              Die Geschichte muss neu geschrieben werden:

              Wegen etwas Altbekanntem?

              Es ist ein großer Irrtum, dass HTML im Web verwendet würde! Stattdessen baut das Web auf was-auch-immer auf.

              Zitat #250

              Ist es nicht valide, dann ist es was-auch-immer, aber kein (X)HTML.
              Vielleicht ist es auch einfach nicht valides, nicht standardkonformes, fehlerhaftes HTML.

              Vielleicht ist es auch beides ...

              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,

              Demnach gibts im ganzen Web nahezu kein HTML.

              Zumindest verwendet fast das ganze Web kein HTML wie es das W3C definiert.

              Nicht gerade neue Erkenntnis ...

              Vielleicht ist es auch einfach nicht valides, nicht standardkonformes, fehlerhaftes HTML.

              Zumindest was HTML 4.x angeht.

              Alleine die Nennung der Version 4, läßt den geneigten Leser wohl schon vermuten, daß es auch andere HTML-Versionen geben müßte (z.B. 3.2 oder 5). Daß TYPE in HTML 3.2 ein (Pflicht-)Attribut in SCRIPT wäre, ist mir dagegen neu.

              Daß das dann sogar (selbst nach W3C-Maßstäben) kein oder invalides HTML sein soll, logischerweise auch.

              Und da, back to the roots, sich diese dümmliche Versionsangabe (imoptionalen Doctype) zukünftig ohnehin (wieder) erledigt hat ...

              Und ja: HTML ist, was ein TITLE-Element hat und ansonsten den Grundlinien des HTML entspricht.

              Gruß, Cybaer

              --
              Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
              (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
          2. Hi,

            Natürlich hat Cheatah recht.

            Er hat *nicht* geschrieben, daß SCRIPT ohne Attribut kein XHTML wäre. Daß es kein XHTML ist (obwohl vom Autor deklariert), war bereits vorher abgefrühstückt. Für jemanden, der jedes Wort belehrend auf die Goldwaage legt, ist das doch ein schwaches Bild - den großen Rest kümmert's eh nicht ... =;->

            Na und? Wie ich schon einmal anmerkte: „Als JavaScript-Guru kennt er sich mit dem aus, was zwischen dem '>' von '<script.*>' und dem '<' von '</script> steht; nicht notwendigerweise auch mit dem, was links und rechts davon steht.

            Keine Frage. Diese Vermutung ist durchaus berechtigt. Ich hingegen vermute: Mit den hiesigen "(X)HTML-Gurus" wird er im (X)HTML-Wissen locker mithalten ...

            ... und ernsthafte DOM-Programmierung ohne dieses Wissen, kann ich mir auch nur schwerlich vorstellen ...

            IEs mit <?xml version="1.0" encoding="UTF-8"?> in den Quirks-Modus zu schicken, ist selten eine gute Idee.

            Wobei ja bekanntlich die Kernfrage ist, inwieweit es überhaupt sinnvoll ist, in XHTML zu kodieren, wenn man HTML ausliefert. Das gepostete Listing ist ja nicht gerade unsymptomatisch für das, was man "Tag-Soup-XHTML" nennen könnte - und was mit XHTML ja eigentlich verhindert werden sollte ...

            Gruß, Cybaer

            --
            Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
            (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
            1. @@Cybaer:

              Ich hingegen vermute: Mit den hiesigen "(X)HTML-Gurus" wird er im (X)HTML-Wissen locker mithalten ...
              ... und ernsthafte DOM-Programmierung ohne dieses Wissen, kann ich mir auch nur schwerlich vorstellen ...

              Ich eigentlich auch nicht. Deshalb meine Verwunderung, weshalb zum Geier man seiner Meinung nach invaliden Quelltext verfassen sollte?

              Wobei ja bekanntlich die Kernfrage ist, inwieweit es überhaupt sinnvoll ist, in XHTML zu kodieren, wenn man HTML ausliefert.

              Was für eine Frage? ;-) „Viele bevorzugen XHTML wegen der Vorteile, die XML beim Bearbeiten oder Verarbeiten der Dokumente mit sich bringt.“ [SERVING-XHTML]

              Live long and prosper,
              Gunnar

              --
              Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
              1. Hi,

                Deshalb meine Verwunderung, weshalb zum Geier man seiner Meinung nach invaliden Quelltext verfassen sollte?

                Gründe für seine Vorliebe hat er genannt. Und man darf wohl schlußfolgern, daß er wohl auch der großen Fraktion angehört, die die Validität zu einer W3C-DTD nicht sonderlich wichtig nehmen (oder in diesem Fall: nur zur 3.2er DTD ;->) ...

                ... wurde ja auch schon öfters hier thematisiert.

                Wobei ja bekanntlich die Kernfrage ist, inwieweit es überhaupt sinnvoll ist, in XHTML zu kodieren, wenn man HTML ausliefert.
                Was für eine Frage? ;-)

                Ja, IMHO eine gute Frage. Mir sind in letzter Zeit für meinen Geschmack viel zu viele über die Füße gelaufen, die in XHTML coden, aber dies letztlich falsch tun (nicht unbedingt invalide, sondern auch nicht passendes JS), dies aber nicht merken, weil sie ja gar keine XHTML-Resourcen liefern.

                „Viele bevorzugen XHTML wegen der Vorteile, die XML beim Bearbeiten oder Verarbeiten der Dokumente mit sich bringt.“ [SERVING?! -XHTML]

                Wer hätte das bei der Quelle gedacht?! ;->

                Ich bevorzuge z.B. lieber XML als Arbeitsbasis und dann Wandlung nach HTML für die Ausgabe, und würde nicht auf den Gedanken kommen, ein (IMHO letztlich) Ausgabeformat wie XHTML für die Verarbeitung einzusetzen.

                Und: Wieviel Promille von den Autoren, die in XHTML coden, tun dies aus dem Grund der XML-Verarbeitung (wobei die Hoffnung besteht, daß diese Autoren so einigermaßen wissen, was sie tun)? Ich würde mal einfach tippen, die weit überwiegende Mehrheit der XHTML-Coder tut das, weil es (angeblich) "in" ist, oder (angeblich) "aktuell" oder viele "Experten" in Foren dies als ultimative Wahrheit propagieren.

                Es soll ja auch hier in diesem Forum User geben, die bei HTML nur an "Tag-Soup" denken, oder dies zumindest dann gleich schreiben müssen, nicht wahr?

                Wenn man (ohne Know-how und Validator) in HTML "rumsaut" (wozu einen keiner zwingt), mag das schlimm sein, aber es bestehen gute Chancen, daß die Seite trotzdem irgendwie "funzt". Bei ebensosolchem "Rumgesaue" in XHTML ist das nicht anders! Allerdings nur solange der Autor (oder sein Nachfolger) nicht auf die Idee kommt, die Dokumente auch als XHTML auszuliefern.

                Also ich sehe da ein wunderbares Frustpotential für die Zukunft a la: Meine Site ist doch (valides) XHTML, aber sie läuft jetzt trotzdem nicht, oder: Das habe ich so gelesen, und damals lief das ...

                Gruß, Cybaer

                --
                Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
                (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
            2. Hi,

              Natürlich hat Cheatah recht.
              Er hat *nicht* geschrieben, daß SCRIPT ohne Attribut kein XHTML wäre.

              ich habe geschrieben, es sei "nicht mal" HTML - direkt nachdem ich bei etwas anderem, aber zugehörigen, geschrieben habe, es sei kein XHTML. Was daran findest Du unklar?

              Für jemanden, der jedes Wort belehrend auf die Goldwaage legt, ist das doch ein schwaches Bild

              Ich belehre, wenn es für das Gegenüber etwas zu lernen gibt. Dir beispielsweise brauche ich nicht zu sagen, dass "ohne Attribut" eine unzureichende Beschreibung ist; es ist im Kontext auch nicht relevant, zumal richtige Formulierungen oft genug genannt wurden.

              Das gepostete Listing ist ja nicht gerade unsymptomatisch für das, was man "Tag-Soup-XHTML" nennen könnte - und was mit XHTML ja eigentlich verhindert werden sollte ...

              Exakt.

              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. Hi,

                ich habe geschrieben, es sei "nicht mal" HTML - direkt nachdem ich bei etwas anderem, aber zugehörigen, geschrieben habe, es sei kein XHTML. Was daran findest Du unklar?

                Nichts. Außer, daß es HTML ist ...

                Ich belehre, wenn es für das Gegenüber etwas zu lernen gibt.

                Also der Lerneffekt bei z.B. "SCRIPT nicht ohne TYPE-Attribut", ist IMHO gegeben, wenn man den Autor dazu "anregen" möchte, die eigene Sichtweise zu übernehmen.

                Die praktische Relevanz hier konkret Null, und der sinnvollste Lerneffekt ist der ganz allgemeine, daß man besser valide zur angegebenen DTD codet.

                So sehr ich dein endloses Bemühen um "Verbreitung der wahren Lehre" auch (mehr oder weniger) gutheiße ...

                Das gepostete Listing ist ja nicht gerade unsymptomatisch für das, was man "Tag-Soup-XHTML" nennen könnte - und was mit XHTML ja eigentlich verhindert werden sollte ...

                Exakt.

                ... und offensichtlich aber nicht verhindert wird.

                Gruß, Cybaer

                --
                Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
                (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
      3. Hi,

        wie immer scharfsinnig und brilliant -
        dafür bist Du hier beliebt und bekannt!

        <quote author="Jens Maul"> Schleima! </quote> ;-)

        Aber: glaubst Du der OP kann mit folgenden Aussagen:
        auch nur irgend etwas anfangen?

        Wenn nicht, kann er a) diesbezüglich bzw. besser recherchieren, und wenn das zu keinem Ergebnis führt, kann er b) gezielter nachfragen.

        Warum an dieser Stelle nicht 5% mehr Hilfe - z.B. ein Link?

        Weil ich müde war. Noch Fragen, Kienzle?

        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. Salut!

          Weil ich müde war. Noch Fragen, Kienzle?

          Nein Hauser! Aber dies wundert mich, da Sie ja wohl nun lange genug gelegen haben müßten;)

          au relire

          Sven aus M.

          1. Hi,

            Weil ich müde war. Noch Fragen, Kienzle?
            Nein Hauser! Aber dies wundert mich, da Sie ja wohl nun lange genug gelegen haben müßten;)

            wer sagt, dass ich geschlafen habe - und dann auch noch im liegen?

            [dramatische Musik, Nahaufnahme zur Augenpartie, die Augen wandern immer wieder von einer Seite zur anderen] [schwarzer Bildschirm, der letzte Ton der Musik verklingt langsam] [Abspann beginnt]

            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. Hallo.

              [dramatische Musik, Nahaufnahme zur Augenpartie, die Augen wandern immer wieder von einer Seite zur anderen] [schwarzer Bildschirm, der letzte Ton der Musik verklingt langsam] [Abspann beginnt]

              Lindenstraße?
              MfG, at

  2. Hallo,

    var vParameter = window["dynamischErzeugteVariable"][j];
      document.getElementById("div"+j).onclick = function() {fTest(vParameter);};

    Es kommt aber immer "9", also der hier letzte erzeugte Div.

    Du erzeugst in einer Schleife immer neue Funktionsobjekte. In den Funktionen greifst du auf die lokalen Variablen der äußeren Funktion zu. Das geht nur, weil verschachtelte Funktionen Closures bilden.

    All diese Funktionen verweisen auf diesen Variablen. Und zu dem Zeitpunkt, zu dem sie ausgeführt werden, ist die äußere Funktion schon längst beendet worden. Aber die Variablen bleiben erhalten, weil es noch viele Funktionen gibt, die darauf Zugriff haben. Und der letzte Wert von vParameter ist nunmal der höchste Wert, den j in der Schleife zugewiesen bekommen hat.

    Zur weiteren Lektüre: </archiv/2007/6/t153514/#m998966>

    Wenn du im Click-Handler auf bestimmte Daten Zugriff haben willst, dann kannst du diese z.B. am Element-Objekt selbst als Eigenschaften speichern.
    elementobjekt.eigenschaft = wert;
    Im Event-Handler dann über this.eigenschaft auslesen.

    Mathias

    1. All diese Funktionen verweisen auf diesen Variablen.

      ... dieselben Variablen

    2. Hi Mathias,

      Wenn du im Click-Handler auf bestimmte Daten Zugriff haben willst, dann kannst du diese z.B. am Element-Objekt selbst als Eigenschaften speichern.
      elementobjekt.eigenschaft = wert;
      Im Event-Handler dann über this.eigenschaft auslesen.

      Bingo - das ist genau das was ich brauche. Danke Dir für die detailierte Erklärung (versuche ich aber erst morgen nachzuvollziehen ;) ) und den Lösungsansatz. Du hast mir mehr als nur den heutigen Tag gerettet. Tausend Dank.

      Gruss Jense

  3. @@Jense:

    Vom JavaScript-Kram mal abgesehen:

    <?xml version="1.0" encoding="UTF-8"?>

    Dazu siehe PS in https://forum.selfhtml.org/?t=173073&m=1135535

    <!DOCTYPE html
         PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt">


    Da ist dir beim C&P ein 'd' verlorengegangen.

    <meta http-equiv=Content-Type content="text/html; charset=UTF-8">


    Und hier ein '/'. [SELFHTML]

    Live long and prosper,
    Gunnar

    --
    Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.