Helmut: JavaSript-Zeilen mit JavaScript automatisch erzeugen

Hallo,
ich habe versucht, per document.write(...) in einen JavaScript-Bereich (mit Hilfe einer for-Schleife) weiteren JavaScript-Code einzufügen. Die Zeilen werden richtig gebildet und angezeigt, aber nicht als JS ausgeführt.
     Was kann man da machen? Für einen Tipp wäre ich dankbar.
MfG, Helmut

  1. Hi,

    ich habe versucht, per document.write(...) in einen JavaScript-Bereich (mit Hilfe einer for-Schleife) weiteren JavaScript-Code einzufügen.

    welchen Zweck sollte so etwas haben?

    Die Zeilen werden richtig gebildet und angezeigt, aber nicht als JS ausgeführt.

    Ist Dir schon mal aufgefallen, dass immer dann, wenn Du mit JavaScript HTML-Code erzeugst, Du Dich in einem JavaScript-Bereich befindest? Überlege Dir also, wo Dein Denkfehler liegt.

    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. Ist Dir schon mal aufgefallen, dass immer dann, wenn Du mit JavaScript HTML-Code erzeugst, Du Dich in einem JavaScript-Bereich befindest? Überlege Dir also, wo Dein Denkfehler liegt.

      Cheatah

      Hallo Cheatah,
      danke für den Hinweis! Das Problem ist, dass ich js- statt html-Code erzeugen will. Deshalb bilde ich zunächst nur eine Textkette, die aussieht wie js-Code. Also brauche ich vielleicht so etwas, wie eine Funktion, die die Kette als js-Code an der Stelle ihres Aufrufs einfügt. Vielleicht gibt es so eine Funktion und Du kennst sie? Jede andere Möglichkeit wäre mir natürlich auch recht.
      MfG, Helmut

      1. Hi,

        danke für den Hinweis! Das Problem ist, dass ich js- statt html-Code erzeugen will.

        noch einmal der mit Abstand wichtigste Teil meines Postings: Warum?

        Vielleicht gibt es so eine Funktion und Du kennst sie?

        Es gibt eine Funktion, die Du *niemals* benutzen solltest, solange Du nicht *exakt* weißt, was Du tust (Deine Frage belegt, dass dem nicht so ist), und auch mit Deinem bisherigen Vorgehen gibt es eine Lösung, die es zu vermeiden gilt. Erneut: Was zur Hölle ist eigentlich das Problem, dass Du auf diese Weise zu lösen versuchst?

        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. Was zur Hölle ist eigentlich das Problem, dass Du auf diese Weise zu lösen versuchst?

          Cheatah

          Hallo Cheatah,
          ich brauche (für eine Bildanzeige-Seite) einen sehr regelmäßig aufgebauten js-Code-Abschnitt wie folgt:

          b[0] = new Image(); b[0].src = "002.jpg";
            b[1] = new Image(); b[1].src = "003.jpg";
            ...
            b[99] = new Image(); b[99].src = "101.jpg";

          Die (hier) 100 Zeilen habe ich als Zeichenkette per for-Schleife generiert und suche nun nach einem Weg, die Kette als js-Code einzufügen. Händisch wär's wenig befriedigend. Die Kette aus dem Browserfenster per copy & paste in den Quellcode zu transportieren, ginge auch, wäre aber auch nicht gerade der elegante Weg.

          MfG, Helmut

          1. Hi,

            ich brauche (für eine Bildanzeige-Seite) einen sehr regelmäßig aufgebauten js-Code-Abschnitt wie folgt:

            b[0] = new Image(); b[0].src = "002.jpg";
              b[1] = new Image(); b[1].src = "003.jpg";
              ...
              b[99] = new Image(); b[99].src = "101.jpg";

            Nein, den *Code* brauchst du nicht.

            Was du vielleicht brauchst, ist die Datenstruktur, welche er darstellt.

            Aber wozu willst du diese erst *per* JavaScript *als* JavaScript-Code erstellen lassen - warum erzeugst du sie nicht *direkt*, an der Stelle, wo du derzeit den Code dafür erzeugst ...?

            Die (hier) 100 Zeilen habe ich als Zeichenkette per for-Schleife generiert und suche nun nach einem Weg, die Kette als js-Code einzufügen. Händisch wär's wenig befriedigend.

            Und automatisch wär's immer noch Unfug, s.o.
            Erzeuge in der for-Schleife nicht Code, sondern die Datenstruktur (bzw. ihre Elemente), die du brauchst.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. Hallo ChrisB,

              Nein, den *Code* brauchst du nicht.

              Gut, der einzige Code, der immer läuft, ist der gestrichene.

              Was du vielleicht brauchst, ist die Datenstruktur, welche er darstellt.

              Ein anderer Ansatz, der mir noch nichts sagt!

              • warum erzeugst du sie nicht *direkt*, an der Stelle, wo du derzeit den Code dafür erzeugst ...?

              Weil es (hier und im ersten Ansatz) 100 Zeilen wären und manchmal vielleicht mehr.

              Und automatisch wär's immer noch Unfug, s.o.

              Wenn "Unfug" zum Ziel führt, ist er mir recht.

              Erzeuge in der for-Schleife nicht Code, sondern die Datenstruktur (bzw. ihre Elemente), die du brauchst.

              Wenn ich wüsste, wie das geht! Es würde mir helfen, wenn Du einschlägige js- oder html-Konstrukte zitieren könntest. Beim Nachschlagen in selfhtml würde daraus vielleicht meine Inspiration geweckt.
                   Damit klar wird, wo ich abzuholen wäre, füge ich mal den bisherigen Code (er tut, was ich will) mit nur 5 Bildern an, den ich auf eine größere Bildzahl umstellen will. Die 34 Zeilen sind zwar ein bisschen viel für ein Forum, aber vielleicht entstht dadurch mehr Klarheit.

              MfG, Helmut

              <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                    "http://www.w3.org/TR/html4/loose.dtd">
              <!-- INSPIRATION: http://de.selfhtml.org/javascript/objekte/images.htm#src-->
              <html><head><title>Animierte Bildserie</title>
              <script type="text/javascript">
              function fAnima (){
                 if (i > nBild){i=0;}  // Endlosschleife durch Rekursion
                 tt = document.Formular.thalte.value;
                 if (tt == 0){return;}
                 t=tt*1000;
                 document.images[0].src = b[i].src;  // Ersetzt Bild
                 i = i + 1;
                 window.setTimeout("fAnima()", t); }  // Ende function
              </script></head>

              <body>
              <img src="001.jpg" height="500" alt="jpg-Bild">  <!-- Anfangsbild -->
              <div style="position:fixed; left:700px; top: 20px;"> <p>Titel der Bildserie und Gebrauchsanweisung </div>
              <script type="text/javascript">
                 var nBild = 3;
                 var b = new Array();
                 b[0] = new Image(); b[0].src = "002.jpg";
                 b[1] = new Image(); b[1].src = "003.jpg";
                 b[2] = new Image(); b[2].src = "004.jpg";
                 b[3] = new Image(); b[3].src = "005.jpg";
                 var i = 0;
              </script>

              <form name="Formular" action="">
                 <input type="text" name="thalte" value="2" size="1" />
                 Betrachtungszeit (s), &nbsp;  &nbsp; Stopp: 0, &nbsp; &nbsp; Neustart nach Stopp: Eingabetaste
                 <script type="text/javascript"> fAnima() </script>
              </form>
              </body></html>

              1. Hi,

                Erzeuge in der for-Schleife nicht Code, sondern die Datenstruktur (bzw. ihre Elemente), die du brauchst.
                Wenn ich wüsste, wie das geht!

                na, offensichtlich kannst Du einen String erzeugen, der die jeweilige Code-Zeile enthält. Wenn Du statt dessen einfach nur den entsprechenden Code verwendest, ist Dein Problem gelöst. Das ist ebenso schwer, wie in einer Schleife die Werte von 1 bis 100 auszugeben - und dazu erzeugst Du ja auch keinen String, der hundert mal "document.write()" enthält, oder?

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

                  na, offensichtlich kannst Du einen String erzeugen, der die jeweilige Code-Zeile enthält. Wenn Du statt dessen einfach nur den entsprechenden Code verwendest, ist Dein Problem gelöst.

                  Danke, zusammen mit anderen Antworten ist jetzt alles klar. Der Code läuft so, wie er soll und hat bei hundert Bildern nicht mehr Zeilen als bei (z.B.) dreien.
                  MfG, Helmut

          2. Hallo Helmut,

            b[0] = new Image(); b[0].src = "002.jpg";
              b[1] = new Image(); b[1].src = "003.jpg";
              ...
              b[99] = new Image(); b[99].src = "101.jpg";

            schon mal versucht, den Code nicht zu erzeugen, sondern laufen zu lassen?

            var b = new Array(100);  
            for(var i=0;i<100;i++) {  
              b[i] = new Image();  
              if(i<10) b[i].src = "00"+i+".jpg";       // Auffüllen mit Nullen auf drei Stellen  
              else if(i<100) b[i].src = "0"+i+".jpg";  // der "+"-Operator verkettet hier Strings  
              else b[i].src = i+".jpg";                //  
            }
            

            (ungetestet)

            Bitte übernimm den von mir nicht getesteten Code jetzt nicht einfach so, sondern versuch ihn zu verstehen.

            Gruß, Jürgen

            1. Bitte übernimm den von mir nicht getesteten Code jetzt nicht einfach so, sondern versuch ihn zu verstehen.

              Hallo Jürgen,
              danke, danke, danke für die Lösung!

              Ich habe Deinen Code auf den verkleinerten Übungsfall (5 Bilder statt 100) geringfügig umgestellt (s.u.) - und er läuft.
                  Die Lösung ist leicht zu verstehen. Alle ihre Details gehörten schon zu meinen js-"Vokabeln". Das Auffüllen mit Nullen hatte ich mir noch erspart, da ja erst mal nur eine einstellige Bilderzahl vorlag. Aber in diesem Fall ging mein erster Ansatz völlig auf den Holzweg.
                  Ich darf bei der Gelegenheit erwähnen, dass ich ein paar Jahrzehnte Umgang mit Fortran und das letzte Jahrzent mit Matlab und Scilab hatte. Diese prozeduralen Sprachen versperren wohl den Blick für js. Jedenfalls überrascht mich immer wieder die Eigentümlichkeit der js-Codes. Ich kann js eigentlich nur an Beispielen lernen.
                  Ich bedanke mich nochmal ganz herzlich für Deine Hilfe und hoffe,  bald selbst einmal etwas als "Beantorter" ins Forum einspeisen zu können.
              Herzliche Grüße, Helmut

              -------------------------------------------------------------------------
              ...
              var b = new Array(4); var c = new Array(4);
              for(var i =0; i <=3; i=i+1)
              {
                c[i]=i+2;
                b[i] = new Image();
                if(i<10) b[i].src = "00"+c[i]+".jpg";       // Auffüllen mit Nullen auf drei Stellen
                else if(i<100) b[i].src = "0"+c[i]+".jpg";  // der "+"-Operator verkettet hier Strings
                else b[i].src = c[i]+".jpg";                //
              }
              ...
              -------------------------------------------------------------------------

              1. Hallo Helmut,

                ...
                var b = new Array(4); var c = new Array(4);
                for(var i =0; i <=3; i=i+1)

                übliche schreibweise ist hier: for(var i=0; i<4; i++)

                {
                  c[i]=i+2;

                wenn c als Array später nicht mehr benötigt wird, reicht hier auch ein Skalar:
                c = i+2;

                b[i] = new Image();
                  if(i<10) b[i].src = "00"+c[i]+".jpg";       // Auffüllen mit Nullen auf drei Stellen

                c

                else if(i<100) b[i].src = "0"+c[i]+".jpg";  // der "+"-Operator verkettet hier Strings

                c

                else b[i].src = c[i]+".jpg";                //

                c

                }

                Gruß, Jürgen