Funktions Variable resetten

  • Hi @ all


    Ich hab ehrlich gesagt nirgend vorab gesucht, da ich grad gar nicht so genau weiss was ich da suchen muss.


    Ich habe folgende Funktion, um eine Art Overlay Alert Box zu aktivieren:

    Code
    1. function openAlert(message, title, autoclose, link) {...}


    Diese funktion wird aufgerufen mit:

    Code
    1. openAlert('Testnachricht', 'Testtitel', true, 'homepage');


    Das heisst in meinem Fall:

    1. es wird da Overlay geöffnet
    2. Titel und Text eingefügt
    3. autoclose, da true, startet eine Timer der nach 3 Sekunden das Overlay wieder schliest mit .hide().
      Und der Schlissen Button wird hidden und es steht ein Text dass das Frame automatisch geschlossen wird
    4. homepage ist dann die Seite die nach abschlus aufgerufen wird.

    Alles funktioniert einwandfrei soweit.


    Das einzige Problem das besteht:

    So wie im Beispiel, ich starte den Aufruf mit Autoclose, somit geht das Overlay auf hidden nach 3 Sekunden und die Startseite wird geladen.

    Wenn ich jetzt direkt nach der Aktion, ohne Seitenreload, folgende Funktion aufrufe:

    Code
    1. openAlert('Testnachricht', 'Testtitel');

    Dann sollte das Overlay mit Text und Butten zum schliessen, ohne Autoclose kommen.

    Es kommt aber das Overlay ohne Button mit der Anzeige dass automatisch geschlossen wird, aber ohne diese Funktion.

    Das Overlay geht nicht mehr weg.


    Ich verstehe das so, dass die übergebene Variable immer noch mir true bestückt ist, denn erst nach reload geht das Overlay wieder mit Button.

    Wie kan ich also die Variable auf leer oder false setzen, sodass die Funktionsvariable nicht mehr grieift?


    Ich habe schon versucht beim Schliessen des Overlays fogende Befehle, was aber nicht funktioniert hat.

    Code
    1. function closeAlert() {
    2. ...
    3. autoclose = false;
    4. ...
    5. autoclose = '';
    6. ...
    7. autoclose = nul;


    Was mich auch etwas wundert, dass folgendes was ich versucht hab auch nicht funktioniert hat.

    Code
    1. openAlert('Testnachricht', 'Testtitel', false);

    Einfach die Variable auf False zu übergeben hat auch nichts gebreacht. Nach einmaligem Benutzen der Autoclose Funktion, bleibt die Anzeige aufrecht aber die Funktion nicht.


    Was genau mach ich da falsch oder wie sezte ich solche Variablen zurück?


    MfG und Danke für Eure Zeit

  • Wenn ich jetzt direkt nach der Aktion, ohne Seitenreload, folgende Funktion aufrufe:

    ...

    Das Overlay geht nicht mehr weg.

    Der Timer vom ersten Aufruf brichst du in der Funktion ab?


    Ich verstehe das so, dass die übergebene Variable immer noch mir true bestückt ist

    Funktionsaufrufe teilen sich keine Variablen(Argumente) untereinander. Außerdem hat dein zweiter Aufruf keine "übergebene Variable" (autoclose).


    Ich habe schon versucht beim Schliessen des Overlays fogende Befehle, was aber nicht funktioniert hat.

    JavaScript
    1. function closeAlert() {
    2. ...
    3. autoclose = false;
    4. ...
    5. autoclose = '';
    6. ...
    7. autoclose = nul;

    Das hätte, wenn überhaupt nur einen Sinn, wenn "autoclose" eine globale Variable wäre und kein Parameter deiner Funktion!

    Und "nul" muss "null" heißen.


    Einfach die Variable auf False zu übergeben hat auch nichts gebreacht. Nach einmaligem Benutzen der Autoclose Funktion, bleibt die Anzeige aufrecht aber die Funktion nicht.

    Dein Fehler liegt ziemlich sicher irgendwo innerhalb deiner Funktion. Wenn du konkrete Hilfe willst, dann poste mal "openAlert"!

  • Hi, Danke für die Antwort


    Zitat

    Der Timer vom ersten Aufruf brichst du in der Funktion ab?

    Eigentlich nicht, die Funktion des ersten Aufrufs ist ja dann schon zu Ende ausgeführt

    Code
    1. if (autoclose) {
    2. $('.template > .button > button').hide();
    3. $('.template > .button').html('<b style="font-size:10px">( wird automatisch geschlossen )</b>');
    4. window.setTimeout(function () {
    5. closeAlert();
    6. }, 3000);
    7. }


    Zitat


    Funktionsaufrufe teilen sich keine Variablen(Argumente) untereinander. Außerdem hat dein zweiter Aufruf keine "übergebene Variable" (autoclose).

    Hmm ok, verstanden, dann ist es nicht die Funktion.


    Zitat

    Das hätte, wenn überhaupt nur einen Sinn, wenn "autoclose" eine globale Variable ...

    Ok, eben auch verstanden


    Zitat

    ...Und "nul" muss "null" heißen.

    War nur ein Schreibfehler .-)


    Zitat

    Dein Fehler liegt ziemlich sicher irgendwo innerhalb deiner Funktion. Wenn du konkrete Hilfe willst, dann poste mal "openAlert"!

    Ich bin nicht sicher was es ist, die Funktion funktioniert einwandfrei, solange nicht einmal die Funktion mit autoclose kommt.



    Danke nochmal für die Antwort, eventuell siehst Du den Fehler im Code.


    MfG

  • Oh my god


    ..... Ohne Worte


    Das ist ja jetzt echt peinlich, beim Schreiben des Posts ist mir aufgefallen wo der Fehler eventuell liegen sollte.

    Kann es zwar erst später etesten, aber es liegt wahrscheinlich am Style.


    Ich setzte in der Funktiopn doch den Button auf hidden und den Autoclose Text, das sollte ich beim Schliessen auch wieder ändern.


    Ich glaub ich saß einfach zu lang dran und hätte ne Pause gebraucht :-)


    Ich sag trotzdem Bescheid, wenn ich es getestet hab


    MfG

  • Ich denke schon, dass ich den Fehler sehe:

    Code
    1. if (autoclose) {
    2. $('.template > .button > button').hide();
    3. $('.template > .button').html('<b style="font-size:10px">( wird automatisch geschlossen )</b>');
    4. window.setTimeout(function () {
    5. closeAlert();
    6. }, 3000);
    7. }

    Du verbirgst zwar den Schließen-Button und ersetzt ihn durch den anderen Text, aber wenn der Parameter autoclose nicht gesetzt ist, machst Du das nicht rückgängig. Lösung:

    Oder, etwas eleganter, beides im HTML vorsehen und das, was momentan gebraucht wird, sichtbar machen und das andere unsichtbar.

  • Zitat

    Ups, da habe sich jetzt unsere Postings überkreuzt, Du hast geantwortet, während ich geschrieben habe :D

    :D:D:D


    Passiert, aber danke dass Du mein Verdacht damit bestätigst.

    Ich sag ja etwas peinlicher Anfängerfehler :D


    Danke Euch trotzdem


    MfG


    Edit: noch ein Codier Fehler gefunden dabei :-)

    Ich setze den Button auf hide, der in der html steht, welche ich daraufhin überschreibe, was auch unnötig ist.

    ich denk ich muss einfach mal Pausen einlegen beim Schreiben :-)

  • Zitat

    Oder, etwas eleganter, beides im HTML vorsehen und das, was momentan gebraucht wird, sichtbar machen und das andere unsichtbar.

    So werd ich das übrigens dann lösen, denn das ist etwas Funktions freundlicher meiner Meinung


    MfG

  • Kann es zwar erst später etesten, aber es liegt wahrscheinlich am Style.

    Hehe, der Fehler lag also doch in der Funktion drinne.

    Hab mich bei meinem Beitrag auch "nur" auf deinen Text an sich fokussiert, sonst hätte ich den Logikfehler sicherlich gesehen.

    Aber ja, was solls. Bin wohl noch am schlafen :D


    Oh gott, 2 mal editieren, um das Semikolon im Smiley zu checken!