Florian : Dynamisch erzeugte Variablen registrieren

Hallo Zusammen!

Bin langsam am verzweifeln.

Habe folgendes Problem:
Mit PHP erzeuge ich eine JavaScript Variable meineVar2006051 = 'wert'
Nun versuche ich den Wert dieser Variablen in Javascript abzufragen, dazu bastel ich mir dynamisch den Variablen-Namen zusammen und zwar so:

maxjahr = String(jahr);
maxmonat = String(monat);
maxtag = String(i);
maxdatum = eval(maxjahr+maxmonat+maxtag);

neueVar = eval("meineVar"+maxdatum);

Funktioniert bis hierher bestens: habe dann eine Variable die so aussieht: meineVar2006051

Jetzt kann es natürlich sein, dass ich diese Variable zuvor mit PHP nicht deklariert habe also gibt Javascript mir einen Fehler aus, dass die Variable undefined ist.

Wenn ich die so versuche Javascript bekannt zu machen:
var neueVar; // geht nicht
oder
var eval("meineVar"+maxdatum); // gibt 'missing; after statement'

Geht das alles nicht. Will einfach nur die dynamisch generierte Variable Javascript bekannt machen - leider ohne Erfolg.

Hat jemand eine Idee, wie ich das Problem lösen kann?

Gruß
Florian

  1. Hallo,

    Geht das alles nicht. Will einfach nur die dynamisch generierte Variable Javascript bekannt machen - leider ohne Erfolg.

    Hat jemand eine Idee, wie ich das Problem lösen kann?

    PHP generiert den Quelltext, den dein Browser bekommt. Wenn da nun etwas generiert wurde wie
    var meineVar2006051 = 'hallo';
    dann merkt javascript nichteinmal, dass das ganze von PHP stammte.
    Folglich gibt es da auch nichts zu registrieren.
    (Schau doch mal im Quelltext nach, ob das PHP richtig macht)

    Anonsten kannst du das umständliche Variablennamezambauen auch sparen, indem du entweder einen einfacheren, immer gleichen Namen nimmst, oder immer wenn der Name verwendet wird, ihn von PHP dorthin schreiben lässt. Weil wenn der Code beim Browser is, is dem sowas von egal ob der dynamisch nur für ihn gilt oder nicht.

    So, viel Erfolg beim weiteren JavaScripten,
    werbeklaus

    1. Es reicht einfach:

      var maxdatum = maxjahr + maxmonat + maxtag;
      var neueVar = window["meineVar"+maxdatum];

      Hallo Struppi,

      genau das war es, was ich gesucht habe - vielen Dank :-)
      Kannte das nur mit eval. Benutze Javascript auch nur selten.

      @Werbeklaus: Das ganze ist für ein Kalender gedacht - halte es für sehr Performancelastig, wenn ich für jeden Monat 30 Variablen * 12 Monate * 13 Jahr in den Quelltext schreibe - trotzdem Danke.

      Gruß
      Florian

      1. genau das war es, was ich gesucht habe - vielen Dank :-)
        Kannte das nur mit eval. Benutze Javascript auch nur selten.

        @Werbeklaus: Das ganze ist für ein Kalender gedacht - halte es für sehr Performancelastig, wenn ich für jeden Monat 30 Variablen * 12 Monate * 13 Jahr in den Quelltext schreibe - trotzdem Danke.

        Naja, wie wär's mit Arrays?

        var kalender = new Array();

        und dann mit PHP die entsprechende Ausgabe der variabeln:

        kalender[jahr][monat][tag] = .....

        (wobei dann natürlich die Monatsarrays für das Jahr dann erst erzeugt werden müssen)

        Jetzt kannst du jeden Tag prüfen z.b. so:

        if(kalender[jahr][monat][tag]) Ausgabe(kalender[jahr][monat][tag]);

        Struppi.

        --
        Javascript ist toll (Perl auch!)
  2. Habe folgendes Problem:
    Mit PHP erzeuge ich eine JavaScript Variable meineVar2006051 = 'wert'
    Nun versuche ich den Wert dieser Variablen in Javascript abzufragen, dazu bastel ich mir dynamisch den Variablen-Namen zusammen und zwar so:

    Naja, mal abgesehen davon dass das garantiert nicht der optimale Weg ist, ....

    maxjahr = String(jahr);
    maxmonat = String(monat);
    maxtag = String(i);
    maxdatum = eval(maxjahr+maxmonat+maxtag);

    neueVar = eval("meineVar"+maxdatum);

    ... ist eval evil!

    Es reicht einfach:

    var maxdatum = maxjahr + maxmonat + maxtag;
    var neueVar = window["meineVar"+maxdatum];

    Und mit dem Wissen, solltest du auch die Prüfung mit typeof hinkriegen.

    Struppi.

    --
    Javascript ist toll (Perl auch!)