liverson: neuen Variablennamen aus 2 Variablen erzeugen

Hi,

ich habe ein Schleife wo ich var i inkrementiere. Innerhalb der Schleife brauche ich eine Variable, die bei jedem Durchlauf den Wert von i angehängt  bekommen soll myTest0 ... myTest1 ...myTest2

Leider funzt das so wie unten dargestellt nicht:

for(var i=0;i<sp.length;i++) {  
 var myTest +i = ........  
}

Kann mir jemand helfen, wie ich das hinbekommen?

Gruss

  1. ich habe ein Schleife wo ich var i inkrementiere. Innerhalb der Schleife brauche ich eine Variable, die bei jedem Durchlauf den Wert von i angehängt  bekommen soll myTest0 ... myTest1 ...myTest2

    Wenn du sowas willst, dann wilstt du eigentlich ein Array

    Struppi.

    1. Wenn du sowas willst, dann wilstt du eigentlich ein Array

      Struppi.

      Danke für die Antwort,

      aber wenn ich das innerhalb der Schleife vorher in ein Array schreibe ala

      Objektinstanzen[] = 'myTest'+i;

      und dann mit Objekinstanzen[i] an der Stelle wieder aufrufe funzt das nicht.

      Ich brauch halt für den Aufruf der Instanz einer Klasse immer einen neuen Variablennamen. Wenn ich die Instanzen meinetwegen 3 mal per Hand reinkopiere und es steht definitiv
      myTest1 = new .....
      myTest2 = new .....
      da funzt das Script einwandfrei.

      Da aber die Anzahl der Instanzen, die ich aufrufen muss variabel ist will ich die Nummern hinter myTest per Schleife generieren, was dann aber nicht zum selben Ergebnis führt.

      1. hallo,

        Ich brauch halt für den Aufruf der Instanz einer Klasse immer einen neuen Variablennamen. Wenn ich die Instanzen meinetwegen 3 mal per Hand reinkopiere und es steht definitiv
        myTest1 = new .....
        myTest2 = new .....
        da funzt das Script einwandfrei.

        und dafür ist ein array da:

          
        var myTest = [];  
        for (var i=0; i<max; i++) {  
         myTest[i] = new YouNameIt(); //bzw. myTest.push(new YouNameIt())  
        }  
        
        
        1. »» und dafür ist ein array da:

          var myTest = [];
          for (var i=0; i<max; i++) {
          myTest[i] = new YouNameIt(); //bzw. myTest.push(new YouNameIt())
          }

            
          Hi,  
            
          jetzt poste ich einfach mal den Scriptabschnitt um den es geht, so wie er nicht funzt. wenn ich die for Schleife aussenrum wegmache und meinetwegen das Ganze 3 mal in die Seite kopiere, statt mit i dann einfach mit myVerticalSlide1, ..... dann funzen die entprechenden Bereiche?  
            
            
          ~~~javascript
          var sp=document.getElementsByName("toggler");  
            for(var i=0;i<sp.length;i++) {  
            var myVerticalSlide = array();  
           //-vertical Slide  
           myVerticalSlide[i] = new Fx.Slide('toggle'+i).hide();  
            
           $('v_slidein'+i).addEvent('click', function(e){  
            e.stop();  
            myVerticalSlide[i].slideIn();  
           });  
            
           $('v_slideout'+i).addEvent('click', function(e){  
            e.stop();  
            myVerticalSlide[i].slideOut();  
           });  
            
           $('v_toggle'+i).addEvent('click', function(e){  
            e.stop();  
            myVerticalSlide[i].toggle();  
           });  
            
           $('v_hide'+i).addEvent('click', function(e){  
            e.stop();  
            myVerticalSlide[i].hide();  
            $('vertical_status'+i).set('html', status[myVerticalSlide[i].open]);  
           });  
            
           $('v_show1').addEvent('click', function(e){  
            e.stop();  
            myVerticalSlide[i].show();  
            $('vertical_status'+i).set('html', status[myVerticalSlide[i].open]);  
           });  
            
           // When Vertical Slide ends its transition, we check for its status  
           // note that complete will not affect 'hide' and 'show' methods  
           myVerticalSlide[i].addEvent('complete', function() {  
            $('vertical_status'+i).set('html', status[myVerticalSlide[i].open]);  
           });  
            
          }
          
          1. var sp=document.getElementsByName("toggler");

            Bist du sicher, dass du diese Funktion verwenden willst? Das würde bedeutet, dass du nur auf Formularelemente und Bilder zugreifen möchtest, da die anderen Elemente kein name Attribut kennen und dementsprechend so nicht ansprechbar sind.

            Ansonten enthält dein Code mehrere andere Probleme, die Mathias [link:http://aktuell.de.selfhtml.org/artikel/javascript/organisation/@title=hier] beschrieben hat. Das Problem ist nicht das array oder die Variabel, sondern die Gültigkeit der Variabeln in closures.

            Daneben ist deine Deklaration des Arrays innerhalb der Schleife falsch, damit löscht du das Array jedesmal wieder. Im Prinzip musst du das ganze komplett anders organisieren, da JS keine Blockvariabeln kennt, sondern nur innerhalb von Funktionen diese lokal definiert, d.h. du musst hier einen Funktionsaufruf verwenden.

            In etwa sähe das so aus:
            [code lang=javascript]
               var sp=document.getElementsByName("toggler");
               for(var i=0;i<sp.length;i++) {
               //-vertical Slide
               var myVerticalSlide = new Fx.Slide('toggle'+i).hide();
               addHandler(i, myVerticalSlide);
            ....

            function addHandler(i, slide) {
               $('v_slidein'+i).addEvent('click', function(e){
                  e.stop();
                  myVerticalSlide.slideIn();
               }
               );
            /*
            usw.
            */

            }

              
            Struppi.
            
            1. [code lang=javascript]var sp=document.getElementsByName("toggler");

              Bist du sicher, dass du diese Funktion verwenden willst? Das würde bedeutet, dass du nur auf Formularelemente und Bilder zugreifen möchtest, da die anderen Elemente kein name Attribut kennen und dementsprechend so nicht ansprechbar sind.

              hast Recht, ich spreche damit ein div an, was zwar funktioniert aber nach W3C sicher nicht korrekt ist.

              Das Script ist der FX.Slider aus dem Mootools Framework, das ich eben auf meine Bedürfnisse anpassen wollte.
              Anscheinend doch nicht so einfach wie ich mir das vorgestellt habe.
              Ich gebs jetzt auf, weil ich sonst Gehirnkrebs bekomme. :-)

              Danke auf alle Fälle für die Hilfe.

              Kennt jemand vielleicht ein JS-Framework mit der Funktion wo sich das einfacher bewerkstelligen lässt.

              Gruss

              1. hast Recht, ich spreche damit ein div an, was zwar funktioniert aber nach W3C sicher nicht korrekt ist.

                Das funktioniert nur in manchen Browsern.

                Kennt jemand vielleicht ein JS-Framework mit der Funktion wo sich das einfacher bewerkstelligen lässt.

                die Frage ist, was du exakt da machen willst? Wenn es um Effekte geht, dürfte mootools am mächtigsten sein, gemeinsam mit jquery, evtl. gibt es bereits Funktionen die dein vorhaben direkt umsetzten, mir ist aber nicht ganz klar was der Code machen soll.

                Struppi.

                1. die Frage ist, was du exakt da machen willst? Wenn es um Effekte geht, dürfte mootools am mächtigsten sein, gemeinsam mit jquery, evtl. gibt es bereits Funktionen die dein vorhaben direkt umsetzten, mir ist aber nicht ganz klar was der Code machen soll.

                  Ich habe quasi in einer php die Ausgabe von Datensätzen aus einer Datenbank.
                  Hier will ich die Daten einer Spalte erstmal ausgeblendet lassen und nur beim Klick auf einen Link "weitere Infos anzeigen" dann den versteckten div per toggle Effekt einfahren lassen. Was ich machen könnte wäre das Script einfach in die Datei in der es gebraucht wird direkt reinschmeissen und hinten an myVerticalSlider<?= echo $i; ?> dazuschreiben. Will aber das JS lieber in die Datei laden ums übersichtlicher zu gestalten.

                  Gruss

      2. myTest1 = new .....
        myTest2 = new .....
        da funzt das Script einwandfrei.

        Da aber die Anzahl der Instanzen, die ich aufrufen muss variabel ist will ich die Nummern hinter myTest per Schleife generieren, was dann aber nicht zum selben Ergebnis führt.

        Warum nicht so:

        myTest = [];  
        myTest[0] = new .....  
        myTest[1] = new .....  
        
        

        Struppi.

  2. Hi,

    ich habe ein Schleife wo ich var i inkrementiere. Innerhalb der Schleife brauche ich eine Variable, die bei jedem Durchlauf den Wert von i angehängt  bekommen soll myTest0 ... myTest1 ...myTest2

    Leider funzt das so wie unten dargestellt nicht:

    for(var i=0;i<sp.length;i++) {

    var myTest +i = ........
    }

    
    >   
    > Kann mir jemand helfen, wie ich das hinbekommen?  
      
    versuchs mit `eval();`{:.language-javascript}  
      
      
    Also so:  
      
    ~~~javascript
      
    for(var i=0;i<sp.length;i++) {  
       eval("var myTest" + i + " = ........");  
    }  
    
    

    Gruß!

    1. Mahlzeit Christian S.,

      versuchs mit eval();

      Argl! ... Schon wieder ein Strich auf meiner Liste von unnötigen, überflüssigen und potentiell gefährlichen Verwendungsmöglichkeiten von eval()!

      "eval() is evil!" - das war schon immer so und wird auch immer so bleiben ... wieso meint nur jeder Zweite, an nahezu jeder Stelle unausweichlich diese unsägliche Funktion missbrauchen zu müssen?

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. hallo,

        "eval() is evil!" - das war schon immer so und wird auch immer so bleiben ... wieso meint nur jeder Zweite, an nahezu jeder Stelle unausweichlich diese unsägliche Funktion missbrauchen zu müssen?

        nur um es vorneweg klarzustellen: ich habe noch in keinem script bisher eval verwenden müssen und würde auch jederzeit die evallose lösung vorziehen. wahrscheinlich aber eher aus stil- denn aus "ideologischen" (o.ä.) gründen.
        trotzdem die frage: was ist denn evil an eval? so aus reinem interesse.

        gruß,

        pD

        1. Mahlzeit pother_dane,

          trotzdem die frage: was ist denn evil an eval? so aus reinem interesse.

          Es besteht bei Anwendung von eval() grundsätzlich die Gefahr, dass Code, der dem Entwickler zur Entwicklungszeit unbekannt ist, da er z.B. erst zur Laufzeit des Skripts dynamisch zusammengesetzt wird, im Kontext des Skripts ausgeführt wird - ohne dass irgendwer weiß, WAS überhaupt ausgeführt wird und welche Auswirkungen das hat.

          Es gibt sicherlich Möglichkeiten, diese Risiken zu minimieren und den auszuführenden Code kontrollierbar(er) zu halten - diese sind aber insbesondere Anfängern bzw. Ungeübten oft nicht bekannt, so dass gerade diese Personen (unwissentlich) riesige Sicherheitslücken aufreißen, wenn sie erlauben, dass irgendwelche Benutzereingaben durch irgendwelche obskuren Funktion ohne ausreichende Überprüfung irgendwelchen Code erzeugen, der dann einfach ausgeführt wird ... und schon erzeugen sie z.B. für XSS anfällige Seiten oder noch Schlimmeres.

          MfG,
          EKKi

          --
          sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|