Variable aus Variable zuweisen
pyro
- javascript
Hallo Forum,
habe gerade ein schwieriges JavaScript Problem, bei dem ich nicht mal weiß, wie ich am Besten Google um Hilfe bitten könnte.
Ich habe:
var Variablenliste=new Array("latsche","zufall","winter","limo");
var Neuerwert="Beispiel";
Jetzt sollen alle Inhalte des Arrays Variablen werden und diese den Wert Beispiel bekommen, also
latsche="Beispiel", zufall="Beispiel", winter="Beispiel", limo="Beispiel"
Bei PHP geht das, bei Javascript hab ich keine Ahnung, wie ich das machen könnte.
Danke
Alex
Jetzt sollen alle Inhalte des Arrays Variablen werden und diese den Wert Beispiel bekommen, also
latsche="Beispiel", zufall="Beispiel", winter="Beispiel", limo="Beispiel"
global oder lokal in einer Funktion?
Struppi.
In einer Funktion, von da aus global
Alex
In einer Funktion, von da aus global
Alex
vieleicht solltest du kurz erklären was du machen möchtest, ich bezweifle das du 4 Variablen mit dem selben Wert füllen willst. Das kann auch PHP, macht aber kein Sinn.
Bei PHP liegt der Sinn in einer solchen Funktion, aus einem Array getrennte Variablen zu machen.
OK. Ich dachte in der Kürze liegt die Würze.
In der Tat ich will immer andere Werte in die Variable reinfüllen.
Hier mein ganz konkretes Problem:
Ich hab ein Array:
nachlade_bilder[1][counter]=ort;
nachlade_bilder[1][counter]=new Image();
nachlade_bilder[2][counter].src=dateiname_mit_pfad;
nachlade_bilder[3][counter]=max_height;
nachlade_bilder[4][counter]=max_width;
nachlade_bilder[5][counter]=0; // Retry Counter
nachlade_bilder[6][counter]=1; // 1: erstmal lokal versuchen
// 2: dann auf Server
nachlade_bilder[7][counter]=dateiname;
nachlade_bilder[8][counter]=typ; // 1: Per getElementById einsetzen
In welche steht in [1]
// 2: in Variable einsetzen
In welche steht in [1]
Ich fülle das Array, dann lädt JS per window.setTimeout("bildnachladen2()", 1000); das Bild nach.
Und hier kommt mein Problem:
Wenn ich das Bild per document.getElementById direkt einsetzen kann ist es einfach. Wenn ich es allerdings in eine global Variable reinladen möchte dann bin ich einfach mit meinem JS-Latein am Ende.
Mit anderen Worten: HILFE!!!
Danke
Alex
Hier mein ganz konkretes Problem:
Ich hab ein Array:
nachlade_bilder[1][counter]=ort;
nachlade_bilder[1][counter]=new Image();
nachlade_bilder[2][counter].src=dateiname_mit_pfad;
nachlade_bilder[3][counter]=max_height;
nachlade_bilder[4][counter]=max_width;
nachlade_bilder[5][counter]=0; // Retry Counter
nachlade_bilder[6][counter]=1; // 1: erstmal lokal versuchen
// 2: dann auf Server
nachlade_bilder[7][counter]=dateiname;
nachlade_bilder[8][counter]=typ; // 1: Per getElementById einsetzen
In welche steht in [1]
// 2: in Variable einsetzen
In welche steht in [1]
So ganz verstehe ich deine Frage nicht, aber du möchtest hier vielleicht lieber ein Objekt benutzen. (Dazu dürfte dieser Artikel ganz interessant für dich sein)
nachlade_bilder[counter]= {
ort: ort,
image:new Image(),
max_height: max_height,
max_width: max_width,
retry: 0, // Retry Counter
wo: 1, // 1: erstmal lokal versuchen
// 2: dann auf Server
name: dateiname,
typ: typ // 1: Per getElementById einsetzen
};
nachlade_bilder[counter].image.rc = dateiname_mit_pfad;
Und hier kommt mein Problem:
Wenn ich das Bild per document.getElementById direkt einsetzen kann ist es einfach. Wenn ich es allerdings in eine global Variable reinladen möchte dann bin ich einfach mit meinem JS-Latein am Ende.
Das verstehe ich nicht, was heißt reinladen?
Struppi.
OK. Das mit dem Objekt wäre es ne Sache gewesen. Danke.
Reinladen:
Ich erstelle eine Tabelle mit ganz vielen Einträgen, eine Spalte sind Bilder.
Eigentlich mach ich alles Inline-Bildern, die ich vorher nach Base64 gerechnet habe und in das Array bilder abspeichere.
var myIMG=new Image();
myIMG.src=bilder[i];
myDIV.appendChild(myIMG);
Neue Browser verstehen die Inline Bilder. IE 6 und IE 7 leider nicht. Daher muss ich sie nachladen. Hier gibts dann zwei Möglichkeiten.
1. Lokal oder wenn nicht vorhanden 2. aus dem Web.
Daher muss ich die src der Bilder in das Array Bilder abspeichern. Ich hatte es schon versucht es direkt reinzuladen ohne window.setTimeout. Aber dann hat das mit bilder[i].complete nicht funktioniert.
Das ganze wird eine Offline-Anwendung.
Danke
Alex
Hi,
Ich erstelle eine Tabelle mit ganz vielen Einträgen, eine Spalte sind Bilder.
Eigentlich mach ich alles Inline-Bildern, die ich vorher nach Base64 gerechnet habe und in das Array bilder abspeichere.
Aus welchem Grund sind die Bilder inline untergebracht?
Neue Browser verstehen die Inline Bilder. IE 6 und IE 7 leider nicht. Daher muss ich sie nachladen. Hier gibts dann zwei Möglichkeiten.
- Lokal oder wenn nicht vorhanden 2. aus dem Web.
Wo in deinem Code sind diese unterschiedlichen Fälle abgebildet?
Daher muss ich die src der Bilder in das Array Bilder abspeichern.
Und welches Problem hast du dabei konkret?
Ich hatte es schon versucht es direkt reinzuladen ohne window.setTimeout. Aber dann hat das mit bilder[i].complete nicht funktioniert.
Das mit *was*?
Auch davon hast du uns noch kein bisschen Code gezeigt.
Bitte lies noch mal die Tipps für Fragende durch, und liefere dann eine Problembeschreibung, die das ganze *nachvollziehbar* macht.
MfG ChrisB
Hallo,
die Bilder sind inline untergebracht, da es sich, wie ich schrieb, um eine Offline-Anwendung handelt. Der Vorteil dieser Anwendung ist das All-Inclusive-Feature. Man braucht nur eine Datei, die alle Styles, HTML-Codea, JS, Bilder, etc. beinhaltet.
Mittlerweile hab ich aber das Gefühl, dass aus meiner einfachen Frage - ich hatte versucht das Problem zu abstrahieren - hier was wächst was immer mehr ins Chaos führt. Ich habe meine ursprüngliche Frage mir nochmal durchgelesen und mit dem Text aus dem Link (danke übrigens) verglichen. Die Frage war meiner Meinung nach präzise gestellt und auch der Code war in Ordnung. Wenn ich jetzt hier den gesamten Code, wie auch die Funktionen, die involviert sind poste, dann mach ich schnell mal 1000 Zeilen. Und ich denke, das liest wohl keiner gerne.
Ich war auch überrascht, dass statt eine Antwort auf meine Frage, der Sinn und Unsinn meines Vorhabens durchleuchtet wird. Ich denke, wenn es so unsinnig wäre, dann würde es in PHP wohl nicht so einfach zu realisieren sein. Leider kann ich kein PHP nehmen, da es mit der Offline-Anwendung dann nichts mehr werden würde.
Ich hoffe immer noch auf eine einfache Lösung.
Danke
Alex
[latex]Mae govannen![/latex]
Ich war auch überrascht, dass statt eine Antwort auf meine Frage, der Sinn und Unsinn meines Vorhabens durchleuchtet wird.
Ich denke, wenn es so unsinnig wäre, dann würde es in PHP wohl nicht so einfach zu realisieren sein. Leider kann ich kein PHP nehmen, da es mit der Offline-Anwendung dann nichts mehr werden würde.
ChrisB hat dir das Grund-Prinzip, wie man solche Variablen erstellen könnte sowie eine (fast immer) wesentlich bessere Alternative bereits am gleichen Tag genannt.
Cü,
Kai
[latex]Mae govannen![/latex]
Ich war auch überrascht, dass statt eine Antwort auf meine Frage, der Sinn und Unsinn meines Vorhabens durchleuchtet wird.
Cool. Das war mal was lustiges.
Ich denke, wenn es so unsinnig wäre, dann würde es in PHP wohl nicht so einfach zu realisieren sein. Leider kann ich kein PHP nehmen, da es mit der Offline-Anwendung dann nichts mehr werden würde.
ChrisB hat dir das Grund-Prinzip, wie man solche Variablen erstellen könnte sowie eine (fast immer) wesentlich bessere Alternative bereits am gleichen Tag genannt.
Meine Hoffnung war, dass man es anders lösen kann, da ich sonst den gesamten Code (der ursprünglich nur IE 8 und FF, die Inline-Bilder kennen) ändern müsste.
Hier ist mal das PHP Beispiel:
$a="hallo";
$$a="guten tag";
echo $hallo;
"guten tag"
Cü,
Kai
Danke
Alex
JUHEE! Gefunden!
Danke an alle. Danke an Kai, denn damit hab ich mir nochmal ChrisBs Antwort genau durchgelesen und noch ein wenig gegoogelt:
Hier ist die Lösung.
Kommt von motiv und ist hier zu finden: http://board.gulli.com/thread/179758-javascript-variable-variablen/
var variablenname = 'blabla' ;
var variableninhalt = 10;
eval (variablenname+"="+variableninhalt+";");
alert("blabla: "+blabla);
blabla: 10
1000Dank
Alex
[latex]Mae govannen![/latex]
JUHEE! Gefunden!
Nein.
Danke an alle. Danke an Kai, denn damit hab ich mir nochmal ChrisBs Antwort genau durchgelesen und noch ein wenig gegoogelt:
Hier ist die Lösung.
Kommt von motiv und ist hier zu finden: http://board.gulli.com/thread/179758-javascript-variable-variablen/
... und ist völliger Unsinn von jemandem, der von Javascript sehr wenig Ahnung zu haben scheint. Die von ChrisB erwähnte Schreibweise object["name"] funktioniert genauso gut, ist performanter und birgt nicht die potentiellen Gefahren von eval.
Wenn du gobale Variablen willst, mußt du halt für object das oberste JS-Object window einsetzen
Cü,
Kai
[latex]Mae govannen![/latex]
... und ist völliger Unsinn von jemandem, der von Javascript sehr wenig Ahnung zu haben scheint. Die von ChrisB erwähnte Schreibweise object["name"] funktioniert genauso gut, ist performanter und birgt nicht die potentiellen Gefahren von eval.
Wenn du gobale Variablen willst, mußt du halt für object das oberste JS-Object window einsetzen
Dennoch ist es auch weiterhin besser, die Variablen als Elemente in _einem_ Array zu sammeln und dieses dann meinetwegen global zu verwenden, wenn es sich gar nicht vermeiden lässt.
Und: wer für sowas eval() nutzt, der frisst auch kleine Kinder und schubst alte Leute auf die Straße, wenn ein LKW kommt. ^^
Cü,
Kai
... und ist völliger Unsinn von jemandem, der von Javascript sehr wenig Ahnung zu haben scheint.
Tja, mir ists egal. Hauptsache es funktioniert. Mein Kunde wird sich nicht den Quellcode ansehen und mir ob Grund des hässlichen Codes 10% abziehen.
Die von ChrisB erwähnte Schreibweise object["name"] funktioniert genauso gut, ist performanter und birgt nicht die potentiellen Gefahren von eval.
Manchmal sind auch unelegante und langsamere Lösungen besser und passen einfach besser. Ich würde auch lieber jeden Tag mit dem Porsche für 60.000 Euro 200 Meter in die Arbeit fahren, nehm aber lieber den alten Corsa, weil er sprittsparender ist.
Wenn du gobale Variablen willst, mußt du halt für object das oberste JS-Object window einsetzen
Dennoch ist es auch weiterhin besser, die Variablen als Elemente in _einem_ Array zu sammeln und dieses dann meinetwegen global zu verwenden, wenn es sich gar nicht vermeiden lässt.
Und: wer für sowas eval() nutzt, der frisst auch kleine Kinder und
schubst alte Leute auf die Straße, wenn ein LKW kommt. ^^
Gerne. Dafür bekommt man die Rentner-Abwrackprämie...
Cü,
Kai
Alex
Hallo,
Und: wer für sowas eval() nutzt, der frisst auch kleine Kinder und schubst alte Leute auf die Straße, wenn ein LKW kommt. ^^
Gerne. Dafür bekommt man die Rentner-Abwrackprämie...
ich dachte, das Rentenproblem wäre schon gelöst: Ab 2010 dürfen Rentner bei Rot über die Straße gehen. Ab 2012 müssen sie ...
*nixwieweg*
Martin
[latex]Mae govannen![/latex]
Und: wer für sowas eval() nutzt, der frisst auch kleine Kinder und schubst alte Leute auf die Straße, wenn ein LKW kommt. ^^
Gerne. Dafür bekommt man die Rentner-Abwrackprämie...ich dachte, das Rentenproblem wäre schon gelöst: Ab 2010 dürfen Rentner bei Rot über die Straße gehen. Ab 2012 müssen sie ...
*nixwieweg*
Ich präferiere die Lösung aus einem meiner Lieblingsfilme…
*auchweg*
Cü,
Kai
Hallo,
Ich präferiere die Lösung aus einem meiner Lieblingsfilme…
der Film hat mich schon fasziniert, als ich ihn mit etwa 10 Jahren zum ersten Mal im Fernsehen gesehen habe. Wirklich verstanden habe ich ihn aber erst Jahre später. Und die Methode ... ach, ich weiß nicht ...
*auchweg*
Na dann stehen wir ja jetzt wieder nebeneinander. ;-)
Ciao,
Martin
Manchmal sind auch unelegante und langsamere Lösungen besser und passen einfach besser. Ich würde auch lieber jeden Tag mit dem Porsche für 60.000 Euro 200 Meter in die Arbeit fahren, nehm aber lieber den alten Corsa, weil er sprittsparender ist.
Und du machst es hier aber genau umgekehrt. Du hast einen spritsparenden Porsche gezeigt bekommen. Möchtest aber lieber den verosteten Cadillac ohne TÜV benutzen.
Struppi.
Hi,
Jetzt sollen alle Inhalte des Arrays Variablen werden
das ist eine sehr, sehr schlechte Idee.
Bei PHP geht das,
Auch bei PHP ist es eine sehr, sehr schlechte Idee.
Cheatah
Hi,
var Variablenliste=new Array("latsche","zufall","winter","limo");
var Neuerwert="Beispiel";Jetzt sollen alle Inhalte des Arrays Variablen werden und diese den Wert Beispiel bekommen, also
latsche="Beispiel", zufall="Beispiel", winter="Beispiel", limo="Beispiel"Bei PHP geht das,
Trotzdem gibt es so gut wie nie einen vernünftigen grund dafür, es zu machen.
bei Javascript hab ich keine Ahnung, wie ich das machen könnte.
Das Prinzip der variablen Variablen lässt sich auch in JavaScript emulieren, in dem man Objekteigenschaften über objekt["eigenschaft"] anspricht, statt über objekt.eigenschaft.
Aber noch mal: Das Konzept variabler Variablen an *sich* ist seltenst in der Praxis brauchbar.
Arrays sind so gut wie immer die bessere Alternative.
MfG ChrisB