Sven: laufendes Timeout mit onclick Verbinden

Hi,
ich hab ein Problem bei dem ich nicht weiterkomme.
Ich beschäftige mich erst seit ein paar tagen mit Javascript, hab also noch kaum Erfahrung.
Ich habe ein script geschrieben das ich ca 15 Sekunden nach dem erscheinen durch eine zeitverzögerung mit set Timeout neu laden möchte. In dieser Zeit soll ein onclick-Event passieren, welches am Ende, wenn die Seite neu geladen wird an die URL drangehängt wird.

bis jetzt habe ich beide Funktionen einzeln geschrieben das sieht dann so aus:

  
function refresh ()  
        {  
  
            window.location.href = "question.php";//hier soll die           Variabel endung angehängt werden  
        }  
  
         function getValue(id)  
        {  
            var antwort = id;  
            alert(antwort);  
            var richtig = document.Testform.Browser.value;  
            alert(richtig);  
            if(antwort==richtig)  
            {  
               var endung = "?richtig=richtig";  
            }  
        }  

doch wie kann ich die endung aus getValue in refresh bekommen um sie an die URL dranzuhängen?

ich hoffe Ihr habt eine idee für mich den ich komme an der stelle einfach nicht weiter.

  1. Moin,

    doch wie kann ich die endung aus getValue in refresh bekommen um sie an die URL dranzuhängen?

    Stichwort: globale Variablen. Diese sind in JS sehr einfach zu deklarieren, nämlich ohne Schlüsselwort.

    Hier ein Beispiel:
    http://misterunknown.de/test/globalVariables.html

    Der Skriptbereich sieht folgendermaßen aus:

    <script type="text/javascript">  
    endung = "";  
    function refresh() {  
    window.location.href = "parameter.php"+endung;  
    }  
    function getValue() {  
    	x = Math.round(Math.random() * 5)+1;  
      
    	if(x > 3)  
    	{  
    		endung = "?richtig=richtig";  
    	}  
    	else { endung = "?foo=bar"; }  
    }  
    </script>
    

    Die Funktion "getValue" wird bei mir beim Laden der Seite aufgerufen (onload). Auf der Seite ist ein Button, der die Refresh-Funktion auslöst.
    <button onclick="refresh()">Test</button>

    Die Zielseite ist bei mir ein einfaches PHP-Skript, welches das $_GET-Array ausgibt.

    Grüße Marco

    1. ohhhhh geil :-)

      ich hab schonmal an globale Variablen gedacht und hab das dann wieder verworfen weil ich dachte das gibts net in javascript.

      Danke!!

      1. ich hab schonmal an globale Variablen gedacht und hab das dann wieder verworfen weil ich dachte das gibts net in javascript.

        Die verwendet man aber nicht gerne, muss sie aber auch nie verwenden.
        Eine Closure oder ein Objekt zum speichern ist die bessere Variante.

        <html>  
          <head>  
            <title>Test</title>  
            <script type="text/javascript">  
          
              window.onload = function()  
              {  
                var ext = "?nok";  
                setTimeout(function()  
                {  
                  window.location.href = window.location.href + ext;  
                }, 3000);  
                document.getElementById("btn").onclick = function()  
                {  
                  ext = "?ok";  
                };  
              }  
          
            </script>  
          </head>  
          <body>  
            <input id="btn" type="button" value="Drück mich!"/>  
          </body>  
        </html>
        
        1. Moin,

          Die verwendet man aber nicht gerne, muss sie aber auch nie verwenden.

          Versteh ich nicht. Ist es, weil es zu exzessiver Nutzung und damit zu Speicherproblemen kommen kann? Das sollte doch aber selbst bei größeren Projekten nicht der Fall sein dürfen, oder?

          Grüße Marco

          1. Versteh ich nicht. Ist es, weil es zu exzessiver Nutzung und damit zu Speicherproblemen kommen kann? Das sollte doch aber selbst bei größeren Projekten nicht der Fall sein dürfen, oder?

            Speicher braucht man mit globalen Variablen eher weniger, darum geht es nicht.
            Es ist zum einen die Kapselung von Daten und zum anderen geht es darum den Globalen Namensraum sauber zu halten um Konflikte zw. mehreren Scripten zu vermeiden.
            Dann ist der Code auch leichter zu verstehen, wenn man die Funktionen und deren gemeinsamme Daten an einem Objekt zusammenfasst(das ist bei diesem kleinen Beispiel zwar nicht ganz so der Fall, würde aber auch nicht schaden).

            1. Moin,

              Speicher braucht man mit globalen Variablen eher weniger, darum geht es nicht.
              Es ist zum einen die Kapselung von Daten und zum anderen geht es darum den Globalen Namensraum sauber zu halten um Konflikte zw. mehreren Scripten zu vermeiden.

              Alles klar, das ergibt Sinn^^

              Grüße Marco

      2. Moin,

        ich hab schonmal an globale Variablen gedacht und hab das dann wieder verworfen weil ich dachte das gibts net in javascript.

        Ein guter, kurzer Artikel.

        Grüße Marco

        1. @@misterunknown:

          nuqneH

          Ein guter, kurzer Artikel.

          Die Kürze macht den Artikel nicht gut.

          Mathias mit einem t ist kürzer, ergo besser. ;-)

          Qapla'

          --
          Wer möchte nicht lieber durch Glück dümmer als durch Schaden klüger werden? (Salvador Dalí)
          1. Moin,

            Die Kürze macht den Artikel nicht gut.

            Der Artikel beschreibt die Verwendung von globalen Variablen. Ob dieses Konzept sinnvoll ist oder nicht, sei dahingestellt. Ich bin mir sicher, dass der Threadstarter nicht für eine etablierte Webentwickler-Firma arbeitet und seine Projekt dahingehend bewertet wird.
            Ich schreibe meine Javascript-Snippets auch selbst, oft speziell für einen Anwendungsfall. Ich bin mir sicher, kein Anwender wird mich irgendwann mal anklagen, weil ich globale Javascript-Variablen nutze.

            Grüße Marco

            1. Hallo,

              du vergißt, dass hier auch Kinder mitlesen. Und denen soll man doch ein gutes Vorbild sein ;-)

              Grüße
              Siri

            2. Ich bin mir sicher, dass der Threadstarter nicht für eine etablierte Webentwickler-Firma arbeitet und seine Projekt dahingehend bewertet wird.

              Gut strukturierten JavaScript-Code kann und sollte jeder schreiben. Sinn davon ist nicht, bei anderen toll dazustehen, sondern zu gewährleisten, dass der Code robust funktioniert und weiterentwickelt werden kann, sowie zu verhindern, dass Code einem auf die Füße fällt und man im eigenen Wust an globalen Variablen erstickt.

              Diese Grundlagen sind seit langem bekannt und breit akzeptiert. Wer sich für die historische Grundlegung interessiert, der kann mal in folgende Bücher schauen:

              • DOM Scripting von Jeremy Keith (2005)
              • Beginning JavaScript with DOM Scripting and Ajax von Christian Heilmann (2006)
              • ppk on JavaScript von Peter-Paul Koch (2006)

              Aus heutige Sicht ist natürlich viel hinzugekommen, die Grundlagen des »Unobtrusive JavaScript« gelten aber immer noch. Dazu auch:

              http://onlinetools.org/articles/unobtrusivejavascript/ (2005)
              http://aktuell.de.selfhtml.org/weblog/javascript-einsatz (2005)
              http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/ (2007)

              Ich schreibe meine Javascript-Snippets auch selbst, oft speziell für einen Anwendungsfall.

              Ein JavaScript-Snippet sollte möglichst gekapselt sein nicht mit anderen interferieren. Dazu genügt es oft, es in einen selbstausführenden Funktionsausdruck (IIFE) einzuschließen

              Mathias

    2. doch wie kann ich die endung aus getValue in refresh bekommen um sie an die URL dranzuhängen?

      Stichwort: globale Variablen. Diese sind in JS sehr einfach zu deklarieren, nämlich ohne Schlüsselwort.

      Globale Variablen sind die denkbar schlechteste Lösung. Darüber habe ich 2006 einen Artikel geschrieben:
      http://aktuell.de.selfhtml.org/artikel/javascript/organisation/

      Siehe auch:
      http://molily.de/js/organisation-module.html

      Scripte sollten heutzutage eine der vielen Kapselungs- und Modularisierungsmöglichkeiten verwenden.

      Mathias