Ergebnis 1 bis 9 von 9
  1. #1
    dasmein ist offline Grünschnabel
    registriert
    10-04-2017
    Beiträge
    6

    Probleme mit globalen Variablen

    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

    Mal ein kleines Beispiel
    Erste HTML:
    HTML-Code:
    ...
    ...
    <input type="button" value ="Weiter" onClick="Funktion1">
    ...
    ...
    Javascript:
    var testvar;
    
    function Funktion1(){
    testvar = "test";
    window.location="ZwoteHTML";
    }
    function Funktion2(){
    alert(testvar);
    }
    Zwote HTML:
    HTML-Code:
    ....
    ...
    <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.
    Geändert von mikdoe (12-04-2017 um 14:30 Uhr) Grund: code tags

  2. #2
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.399

    AW: Probleme mit globalen Variablen

    Zitat Zitat von dasmein Beitrag anzeigen
    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

  3. #3
    dasmein ist offline Grünschnabel
    registriert
    10-04-2017
    Beiträge
    6

    AW: Probleme mit globalen Variablen

    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-Code:
    localStorage.setItem("key", "wert");
    localStorage.getItem("key");
    .
    gestolpert. Werde ich nachher Zuhause mal testen.

  4. #4
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.399

    AW: Probleme mit globalen Variablen

    Zitat Zitat von dasmein Beitrag anzeigen
    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.


    Zitat Zitat von dasmein Beitrag anzeigen
    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.

    Zitat Zitat von dasmein Beitrag anzeigen
    Bin über
    HTML-Code:
    localStorage.setItem("key", "wert");
    localStorage.getItem("key");
    .
    gestolpert. Werde ich nachher Zuhause mal testen.
    oder über den standard weg
    https://developer.mozilla.org/de/doc...earch_property

  5. #5
    dasmein ist offline Grünschnabel
    registriert
    10-04-2017
    Beiträge
    6

    AW: Probleme mit globalen Variablen

    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-Code:
    ...
    ...
    <input type="button" value ="Weiter" onClick="Funktion1()">
    ....
    ....
    Funktion1
    Code:
    window.location="Zweite.html";
    Zweite
    HTML-Code:
    ....
    ....
    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) ?
    Geändert von dasmein (13-04-2017 um 14:03 Uhr)

  6. #6
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.399

    AW: Probleme mit globalen Variablen

    Zitat Zitat von dasmein Beitrag anzeigen
    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

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

    Zitat Zitat von dasmein Beitrag anzeigen
    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.

  7. #7
    dasmein ist offline Grünschnabel
    registriert
    10-04-2017
    Beiträge
    6

    AW: Probleme mit globalen Variablen

    Zitat Zitat von tsseh Beitrag anzeigen
    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 ?

  8. #8
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.399

    AW: Probleme mit globalen Variablen

    Zitat Zitat von dasmein Beitrag anzeigen
    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


    Zitat Zitat von dasmein Beitrag anzeigen
    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>

  9. #9
    dasmein ist offline Grünschnabel
    registriert
    10-04-2017
    Beiträge
    6

    AW: Probleme mit globalen Variablen

    Werde ich nachher mal probieren, Danke!
    Mit:
    Zitat Zitat von tsseh Beitrag anzeigen
    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).
    Geändert von dasmein (14-04-2017 um 05:20 Uhr)

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 23-08-2012, 12:51
  2. jQuerry alternative zu einer Globalen Variable?
    Von chris-the-big im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 22-08-2012, 00:04
  3. Antworten: 3
    Letzter Beitrag: 31-08-2010, 07:40
  4. Probleme mit Variablen
    Von alpdreamer im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 17-10-2008, 21:12
  5. Probleme mit Variablen
    Von d.moritz im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 02-12-2005, 10:05

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •