Probleme mit globaler Variable in JS

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit globaler Variable in JS

    Hallo zusammen

    Ich habe folgendes kleines Script.

    [PHP]
    <script type="text/javascript">
    var Wert = "global";
    function loadInfo(info) {
    switch (info) {
    case 1: Wert = "Ausgabe von Informationen 1";
    break;

    case 2: Wert = "Ausgabe von Informationen 2";
    break;

    case 3: Wert = "Ausgabe von Informationen 3";
    break;

    default: Wert = "Ausgabe von Informationen X";
    }
    }
    </script>


    <a href="#" onClick="loadInfo(2)">Testlink</a><br>


    <script type="text/javascript">
    document.write(Wert);
    </script>
    [PHP]
    Eigentlich sollte es, wenn auf einen Link geklickt wird, über die Funktion loadInfo() den Inhalt an einem bestimmten Ort auf der Seite anpassen ohne die Seite neu zu laden. Aber leider wird der Wert in der Variable "Wert" nicht korrekt übergeben, d.h. die Funktion wird zwar aufgerufen, aber der Inhalt von "Wert" ausserhalb der Funktion ändert sich nicht obwohl dies laut allen How-To's die ich gelesen habe so funktionieren sollte.

    Nur wo liege ich falsch?

    Danke für eure Hilfe.

    Gruss Philipp

  • #2
    Übergib info als String (also loadInfo('2') und teste im switch ebenfalls auf String (case "2"...). Dann funzt es

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Danke für deinen Hinweis, aber leider ändert sich nichts...

      Das Script sieht nun so aus:
      <script type="text/javascript">
      var Wert = "global";
      function loadInfo(info) {

      switch (info) {
      case "1": Wert = "Ausgabe von Informationen 1";
      break;

      case "2": Wert = "Ausgabe von Informationen 2";
      break;

      case "3": Wert = "Ausgabe von Informationen 3";
      break;

      default: Wert = "Ausgabe von Informationen X";
      }
      }
      </script>


      <a href="#" onClick="loadInfo('2')">Testlink</a><br>


      <script type="text/javascript">
      document.write(Wert);
      </script>

      Aber egal wie oft ich auf den Link "Testlink" klicke, als Ausgabe kommt immer "global" raus...

      Kommentar


      • #4
        Das document.write() führt dein Browser sofort aus, sobald er das </script> danach empfangen hat.
        Da du erst danach auf den Link klickst, kannst du damit zwar den Inhalt der Variablen ändern, aber das document.write() wird dadurch nicht automatisch noch einmal ausgeführt.

        Kommentar


        • #5
          OK, aber wie krieg das nun hin? Genau das will ich ja machen können...

          Kommentar


          • #6
            pack das document.write in die funktion.

            gruß
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Hab ich schon versucht. War sogar mein erster Gedanke, aber wenn ich das mache, dann wird mir immer die bestehende Seite zugeklatscht und der Wert in der Variable auf einer ansonsten weissen Seite angezeigt.


              Hier noch ein Beispiel, was ich eigentlich auch erreichen möchte:
              http://www.fenaco.ch/deu/firmenmarken_845.aspx
              Zuletzt geändert von philippCH; 31.08.2007, 15:35.

              Kommentar


              • #8
                worked as designed. document.write schreib praktisch das dokument neu. such mal nach innerText und innerHTML

                gruß
                peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  Das würde nicht mehr passieren, wenn du den JS-Block mit der Funktion an der Stelle im Dokument hast, an der ursprünglich das document.write() stand. Denn genau dort wo document.write() ausgeführt wird, schreibt der Browser den Text auch hin. Wenn die Funktion vor dem Body steht, veranlasst das manche Browser, ein neues (Text-) Dokument zu erzeugen.

                  Aber die sauberste Lösung wäre etwa diese:

                  Code:
                  <script type="text/javascript">
                  /* 
                  hier die Funktion, aber statt document.write(Wert)
                  machst du document.getElementById('foo').innerHTML=Wert;
                  */
                  </script>
                  
                  <a href="" onclick="loadInfo('works'); return false;">Bar</a>
                  
                  <div id="foo"></div>

                  Kommentar


                  • #10
                    Wieso nur habe ich befürchtet, dass es eigentlich so einfach wäre...

                    Funzt perfekt. Vielen Dank

                    Kommentar

                    Lädt...
                    X