• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Probleme mit globalen Variablen

dasmein

New member
Hallo,
Folgendes: Ich rufe über meiner index.html eine Funktion einer externen .js ab -> Dort definiere ich den Wert einer globalen Variable und rufe anschließend mit window.location="Seite2.html"; eine neue Seite auf -> dort möchte ich über <body onload="AndereFunktion()"> eine andere Funktion der gleichen Datei aufrufen und mittels document.getElementById('thisID').innerHTML = 'Wert von Variable Test: ' + testvar; den Wert der Variable ausgeben den ich zuvor definiert habe. Jedoch ist die Variable dann undefinied und ich weiß nicht warum. Wenn ich in der zweiten Funktion alert(testvar); einbaue erhalten ich auch nicht den Wert! Wenn ich jedoch direkt über die erste Funktion die zweite Funktion aufrufe, dann funktioniert es. Also es scheint so, dass ich über eine globale Variable keinen Zugriff mehr bekomme bzw. der Wert irgenwie "gelöscht" wird, wenn ich davor eine andere HTML-Datei geladen habe :confused:

Mal ein kleines Beispiel
Erste HTML:
HTML:
...
...
<input type="button" value ="Weiter" onClick="Funktion1">
...
...
Javascript:
var testvar;

function Funktion1(){
testvar = "test";
window.location="ZwoteHTML";
}
function Funktion2(){
alert(testvar);
}

Zwote HTML:
HTML:
....
...
<body onload="Funktion2()">
...
....
Führt zu undefined.

Wie gesagt, wenn ich jetzt über Funktion1 nicht die neue html lade und stattdessen die Funktion2 aufrufe, dann erhalte ich auch "test" bei der Ausgabe.
 
Zuletzt bearbeitet von einem Moderator:
Also es scheint so, dass ich über eine globale Variable keinen Zugriff mehr bekomme bzw. der Wert irgenwie "gelöscht" wird, wenn ich davor eine andere HTML-Datei geladen habe
natürlich, jede seite hat ihre eigene js umgebung.
außerdem sollte man generell auf globale variablen verzichten
 
Hallo und erstmal Danke für deine Antwort! =)
Na ja, da man ja über mehrere .html files die gleiche js-Datei verwenden kann, hätte ich gedacht, dass das so keine Problem sein sollte. Wieso auf globale Variablen verzichten ? Wenn der Wert einer Variable in mehreren Funktionen gebraucht findet, dann ist das doch eine super Sache =) Ich glaube ich habe jetzt eine Lösung zu meinem Problem gefunden:
Bin über
HTML:
localStorage.setItem("key", "wert");
localStorage.getItem("key");
.
gestolpert. Werde ich nachher Zuhause mal testen.
 
Wieso auf globale Variablen verzichten ?
weil man globale variablen nicht kontrollieren kann.
globale variablen können von jeder stelle aus von jedem geändert werden.


Wenn der Wert einer Variable in mehreren Funktionen gebraucht findet, dann ist das doch eine super Sache =)
eine super sache wäre ein objekt mit daten oder funktionsparameter oder lokale variablen in einem scope der allen diesen funktionen gemeinsam ist.

Bin über
HTML:
localStorage.setItem("key", "wert");
localStorage.getItem("key");
.
gestolpert. Werde ich nachher Zuhause mal testen.
oder über den standard weg
https://developer.mozilla.org/de/do...o_the_server_by_modifying_the_search_property
 
Danke für den Link. Ich habe das mit dem "localStorage" versucht und es hat super geklappt! =) Jedoch stehe ich jetzt vor der nächsten kleinen Hürde, womit ich diese Nacht zu kämpfen hatte! Mein Ziel ist es, den Wert einer Variable jedes mal um eins zu erhöhen wenn die Seite geladen wird. Mein vorgehen:

Erste
HTML:
...
...
<input type="button" value ="Weiter" onClick="'Funktion1()">
....
....
Funktion1
Code:
window.location="Zweite.html";

Zweite
HTML:
....
....
body onload="Funktion2()">
...
...
Funktion2
Code:
var i;
if (isNaN(i)) {
    i = 1;
}
localStorage.setItem("key",i++);
alert(localStorage.getItem("key"));
window.location="Erste.html";
Zu begin wird der Wert von i auf 1 gesetzt. Würde ich die Fallunterscheidung weglassen, würde i ja immer den Wert NaN einnehmen. Anschließend möchte ich die Variable um eins erhöhen, aber das passiert leider nicht! Der Wert von i ändert sich nicht. Das i im "ersten Durchlauf" den Wert 1 besitzt, ist mir klar, aber wieso hat der im zweiten Durchlauf immer noch den Wert 1 (und nicht 2) ?
 
Danke für den Link. Ich habe das mit dem "localStorage" versucht und es hat super geklappt! =) Jedoch stehe ich jetzt vor der nächsten kleinen Hürde, womit ich diese Nacht zu kämpfen hatte! Mein Ziel ist es, den Wert einer Variable jedes mal um eins zu erhöhen wenn die Seite geladen wird. Mein vorgehen:

Erste
HTML:
...
...
<input type="button" value ="Weiter" onClick="'Funktion1()">
....
....
Funktion1
Code:
window.location="Zweite.html";

Zweite
HTML:
....
....
body onload="Funktion2()">
...
...
Funktion2
Code:
var i;
if (isNaN(i)) {
    i = 1;
}
localStorage.setItem("key",i++);
alert(localStorage.getItem("key"));
window.location="Erste.html";
Zu begin wird der Wert von i auf 1 gesetzt. Würde ich die Fallunterscheidung weglassen, würde i ja immer den Wert NaN einnehmen. Anschließend möchte ich die Variable um eins erhöhen, aber das passiert leider nicht! Der Wert von i ändert sich nicht. Das i im "ersten Durchlauf" den Wert 1 besitzt, ist mir klar, aber wieso hat der im zweiten Durchlauf immer noch den Wert 1 (und nicht 2) ?
 
Danke für den Link. Ich habe das mit dem "localStorage" versucht und es hat super geklappt! =) Jedoch stehe ich jetzt vor der nächsten kleinen Hürde, womit ich diese Nacht zu kämpfen hatte! Mein Ziel ist es, den Wert einer Variable jedes mal um eins zu erhöhen wenn die Seite geladen wird. Mein vorgehen:
Erste
HTML:
...
...
<input type="button" value ="Weiter" onClick="Funktion1()">
....
....
Funktion1
Code:
window.location="Zweite.html";

Zweite
HTML:
....
....
body onload="Funktion2()">
...
...
Funktion2
Code:
var i;             //ob lokale oder globale var macht keinen Unterschied
if (isNaN(i)) {
    i = 1;
}
localStorage.setItem("key",i++);
alert(localStorage.getItem("key"));
window.location="Erste.html";
Zu begin wird der Wert von i auf 1 gesetzt. Würde ich die Fallunterscheidung weglassen, würde i ja immer den Wert NaN einnehmen. Anschließend möchte ich die Variable um eins erhöhen, aber das passiert leider nicht! Der Wert von i ändert sich nicht. Das i im "ersten Durchlauf" den Wert 1 besitzt, ist mir klar, aber wieso hat der im zweiten Durchlauf immer noch den Wert 1 (und nicht 2) ?
 
Zuletzt bearbeitet:
Zu begin wird der Wert von i auf 1 gesetzt. Würde ich die Fallunterscheidung weglassen, würde i ja immer den Wert NaN einnehmen.
undefined, undefined ist nan

Anschließend möchte ich die Variable um eins erhöhen, aber das passiert leider nicht!
doch, das passiert

Das i im "ersten Durchlauf" den Wert 1 besitzt, ist mir klar, aber wieso hat der im zweiten Durchlauf immer noch den Wert 1 (und nicht 2) ?
es gibt keinen 2. "Durchlauf".
nachdem du i inkrementiert hast wird eine neue seite geladen, Funktion2 kann also nie wieder aufgerufen werden. mal davon abgesehen, dass i eine lokale variable ist und beim nächsten aufruf von Funktion2 somit wieder undefined wäre.
 
Funktion2 kann also nie wieder aufgerufen werden.
Wieso kann Funktion2 nicht erneut aufgerufen werden ? Wenn ich aus der Funktion2 raus bin und an irgendeiner anderen Stelle außerhalb dieser Funktion die Funktion wieder aufrufe, dann funktioniert das doch.

Hmm, wie müsste ich meine Datein "umbauen", sodass es funktioniert ?
 
Wieso kann Funktion2 nicht erneut aufgerufen werden ? Wenn ich aus der Funktion2 raus bin und an irgendeiner anderen Stelle außerhalb dieser Funktion die Funktion wieder aufrufe, dann funktioniert das doch.
weil du in der funktion window.location="Erste.html"; stehen hast. damit wird eine neue seite geladen und die alte ist weg.
theoretisch dauert das laden der seite einige zeit, so dass du durchaus noch zeit hättest die funktion nochmal aufzurufen


Hmm, wie müsste ich meine Datein "umbauen", sodass es funktioniert ?
1.html und 2.html:
Code:
<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <script>
      document.addEventListener("DOMContentLoaded", function()
      {
        var i = location.search.substr(1) || 0;
        console.log(i);
        var btn = document.getElementById("btn");
        if (btn)
        {
          btn.addEventListener("click", function ()
          {
            location = (location.href.includes("1.html") ? "2.html" : "1.html") + "?" + ++i;
          });
        }
      });
    </script>
  </head>
  <body>
    <input id="btn" type="button" value ="Weiter">
  </body>
</html>
 
Werde ich nachher mal probieren, Danke!:)
Mit:
1.html und 2.html:
Ist aber nicht gemeint, dass ich die 1.html und 2.html auf eine Datei "zusammenfasse", oder ? Wollte schon mit zwei HTML-Datein arbeiten =)

Edit\ Also ich habe es jetzt nach deiner Methode mal veruscht. Stehe jetzt aber gerade ein wenig auf dem Schlauch. Von html1 werde ich über den Button auf die nächste Seite weiter geleitet. Der Wert von i ist dann eine bestimmt Zeichenkette und im bei erneutet Aufruft hat er keinen Wert (NaN).
 
Zuletzt bearbeitet:
Zurück
Oben