timex: variablen innerhalb einer schleife definieren?

moin,

ist es moeglich, variablen innerhalb einer schleife zu definieren?! hier mein loesungsansatz ...

for (i = 1; i <= 4; i++) {

slide['i'] = new Image();
 slide['i'].src = "images/slide-0"+i+"-off.gif";
 slide['i']on = new Image();
 slide['i']on.src = "images/slide-0"+i+"-on.gif";
 slide['i']stay = new Image();
 slide['i']stay.src = "images/slide-0"+i+"-on.gif";

}

browser meldet js-fehler, dass slideX nicht definiert ist. geht das ueberhaupt?!

fragt freundlich und mit morgendlichem gruss,
timex

  1. hi,

    for (i = 1; i <= 4; i++) {

    slide['i'] = new Image();
    slide['i'].src = "images/slide-0"+i+"-off.gif";
    slide['i']on = new Image();
    slide['i']on.src = "images/slide-0"+i+"-on.gif";
    slide['i']stay = new Image();
    slide['i']stay.src = "images/slide-0"+i+"-on.gif";

    }

    browser meldet js-fehler, dass slideX nicht definiert ist. geht das ueberhaupt?!

    bestimmt - aber was ist "es" denn überhaupt? was genau willst du erreichen?
    sieht so aus, als ob du dynamisch ein array erweitern wolltest.
    dann solltest du das array selber aber zumindest vor der schleife schon mal angelegt haben:

    var slide = new Array();

    und warum du in der schleife das i in hochkommata setzt, verstehe ich auch nicht.
    warum nicht einfach slide[i] = ...?

    folgendes

    slide['i']on = new Image();
    slide['i']on.src = "images/slide-0"+i+"-on.gif";
    slide['i']stay = new Image();
    slide['i']stay.src = "images/slide-0"+i+"-on.gif";

    wird aber auch dann nicht funktionieren.
    was soll denn slide[i]on sein? eine derartige schreibweise kennt javascript m.W. nicht.

    sieht für mich eher so aus, als ob du dich mit mehrdimensionalen arrays beschäftigen solltest.

    slide[i]['on'] = new Image();
    etc. wäre ja durchaus denkbar.
    (dabei nicht vergessen, auch die zweite dimension schön zu initialisieren.)

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. sieht für mich eher so aus, als ob du dich mit mehrdimensionalen arrays beschäftigen solltest.

      slide[i]['on'] = new Image();
      etc. wäre ja durchaus denkbar.
      (dabei nicht vergessen, auch die zweite dimension schön zu initialisieren.)

      Das tust du genau in diesem Augenblick mit new Image()

      Schöner in diesem Fall finde ich die Schreibweise:
      slide[i].on = new Image();

      Struppi.

      1. hi,

        slide[i]['on'] = new Image();
        (dabei nicht vergessen, auch die zweite dimension schön zu initialisieren.)

        Das tust du genau in diesem Augenblick mit new Image()

        nein, m.E. nicht.
        slide hatten wir als array angelegt, und slide[i] wäre ein neuer eintrag dieses arrays.
        wenn du da jetzt aber noch ein ['on'] hinten dran hängst, ergibst das ja eine array-ebene mehr - aber so wird slide[i] selber höchstens implizit zu einem array gemacht.
        explizit und "sauberer" wäre m.E.
        slide[i] = new Array();
        slide[i]['on'] = ...

        Schöner in diesem Fall finde ich die Schreibweise:
        slide[i].on = new Image();

        ja, sieht auch nett aus.
        wäre dann allerdings kein zweidimensionales array mehr, sondern ein eindimensionales, bestehend aus objekten mit wiederum eigenschaften wie on, korrekt?

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. nein, m.E. nicht.

          Du hast recht.

          slide hatten wir als array angelegt, und slide[i] wäre ein neuer eintrag dieses arrays.
          wenn du da jetzt aber noch ein ['on'] hinten dran hängst, ergibst das ja eine array-ebene mehr - aber so wird slide[i] selber höchstens implizit zu einem array gemacht.
          explizit und "sauberer" wäre m.E.
          slide[i] = new Array();
          slide[i]['on'] = ...

          Nicht ganz, denn es soll ja kein Array sein (wie du weiter unten ja auch richtig schreibst) also:

          slide[i] = new Object();
          slide[i].on = ...

          Schöner in diesem Fall finde ich die Schreibweise:
          slide[i].on = new Image();

          ja, sieht auch nett aus.
          wäre dann allerdings kein zweidimensionales array mehr, sondern ein eindimensionales, bestehend aus objekten mit wiederum eigenschaften wie on, korrekt?

          Die Beschreibung ist korrekt, allerdings macht bei es Objekten keinen Unterschied in JS ob du ['eigenschaft'] oder eigenschaft schreibst, daher vermutlich auch die Verwirrung das das obige ein Assoziatives Array wäre (ist es aber nciht, es hat keinerlei Eigenschaft die ein Array hat)

          Struppi.

  2. Hi,

    ist es moeglich, variablen innerhalb einer schleife zu definieren?! hier mein loesungsansatz ...

    for (i = 1; i <= 4; i++) {

    slide['i'] = new Image();

    window['slide'+i] = new Image();

    i ist zwar eigentlich eine Zahl, aber durch die automatische Typenkonvertierung wird aus 'slide'+i dann 'slide1', 'slide2' usw.

    Und Variablen kann man auch als window-Unterobjekte ansprechen:

    var y = 4;
    alert(y);
    alert(window.y);
    alert(window['y']);

    Grüße, Stefan

  3. Hi,

    for (i = 1; i <= 4; i++) {
    slide['i'] = new Image();
    slide['i'].src = "images/slide-0"+i+"-off.gif";
    slide['i']on = new Image();
    slide['i']on.src = "images/slide-0"+i+"-on.gif";
    slide['i']stay = new Image();
    slide['i']stay.src = "images/slide-0"+i+"-on.gif";
    }
    browser meldet js-fehler, dass slideX nicht definiert ist. geht das ueberhaupt?!

    Vom bereits gesagten abgesehen: wo soll plötzlich ein slideX herkommen? In der Schleife kommt ja kein slideX vor, nur slide

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.