Ankündigung

Einklappen
Keine Ankündigung bisher.

primitives Timer Problemchen

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • primitives Timer Problemchen

    Hi jo,
    ich kämpfe seit 2 Tagen gegen setInterval und setTimeout und verstehe diese Scope Sache nicht.

    Situation: Eine Seite wird dynamisch per Ajax geladen. Der Teil enthält neben html auch Javascript das ebenfalls dynamisch geladen und ab diesem Zeitpunkt aktiv wird.

    Gedanke: Wenn die Seite nochmals per Ajax neu befüllt wird, oder auch geleert wird....verschwindet ja auch das darin aktive Script. Ich bin davon aus das ein gelöschtes Script auch nicht mehr läuft weils ja weg ist. aber die timer laufen weiterhin hat das mit dem window scope zu tun das timer nicht temporär sondern global im Browser sitzen?

    Ziel: der dynamisch nachgeladene Inhalt beinhaltet neben html und JS einen Ladebalken der per Intervall akualisiert wird. Damit mehrere Timer Intervalle möglich werden hatte ich schon versucht den Timer an das Element zu knüpfen, damit wenn das element tot ist auch der timer tot ist. Wilde Theorie.
    Hatte auch überlegt globale Variablen bzw. ein Array als Timer Sammelliste zu machen, die man beim neuladen der Inhalten dann komplett löscht. Ich bekomm die Timerinstanz nicht kontrolliert das ist das Problem. Hatt gehofft die Instanz wäre realativ innerhalb der Funktion und stirbt wenn die Funktion tot ist.

    Derzeit bin ich auf setTimeout übergegangen weil das besser sein soll.
    Bei jedem dynamischen neuladen werden aber die timer der davorgeladenen mit übernommen bzw. existieren weiter. Muss ich die einzelnen Instanzen einfach nur stoppen wenn die Seite neu geladen wird ? Aber wenn mein Element den Timer bekommt "elm.timer =" und das element existiert nicht mehr, ist die Referenz Var (mit dem timer) dann nicht ungültig? Wohin ist dann dieser Timer.
    Ich lese bei stackoverflow immer was komplexes von wegen Outer Scope und anonyme Funktionen oder auch window.settimeout bla bla. Es scheint wohl kompliziert zu sein.

    PHP-Code:
    var allelements2 document.getElementsByClassName("standardloader"); 
            $.
    eachallelements2, function( ielm ){// alle Loaders Starten
                
    if($(elm).attr("alt") != ""){
                    var 
    labelEl = $(".ui-label"elm),
                    
    valueEl = $(".value"labelEl);
                    var 
    fertig parseInt($(valueEl).text());//fertige Prozentzahl importieren
                    
    $(elm).data("fertig"fertig);//Prozentzahl in Element speichern
                    
    if(fertig <= 99){var interval parseInt($(elm).attr("alt"))*1000;//berechnet aus Restzeit und Prozentsatz
                    //$(elm).animateProgress(fertig,elm, interval);//nur einmal animieren
    var looping setTimeout(function(){    $(elm).animateProgress(fertig,loopinginterval)        }, interval);//dauercheck starten und animieren
                    
                    
    }
                }
            
            }); 
    PHP-Code:
    $.fn.animateProgress = function(progresselminterval) {    
        return 
    this.each(function() {
    if(
    progress <= 99){
                var 
    next2 progress;
                
    progress += 1;
                
    //$(this).data("fertig") + 1;//ein Prozent weiter
                
    if(elm && interval >= 0){
                
    elm.timer setTimeout(function(){$(elm).animateProgress(progresselminterval)}, interval);
                } 


  • #2
    Ich bin davon aus das ein gelöschtes Script auch nicht mehr läuft weils ja weg ist.
    Da denkst Du falsch. Denkst Du, Javascript guckt ständig nach, ob der Code noch da ist?

    Ich lese bei stackoverflow immer was komplexes von wegen Outer Scope und anonyme Funktionen oder auch window.settimeout bla bla.
    So lange Du diese Begriffe nicht verinnerlicht hast, brauchst Du gar nicht weitermachen. Und wenn sich irgendwer Dein Machwerk angucken soll, solltest Du erst mal den Code aufräumen.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Hi Nikosch, inwiefern aufräumen? Das war jetzt nur ein kleiner Ausschnitt, wollte nicht alles hier zuwerfen. Den looping hab ich extra nach links verrutscht damit man sieht worum es geht. edit: ach misst jetzt seh ich das auch, da sind so einige Dinge verrutscht.

      Da denkst Du falsch. Denkst Du, Javascript guckt ständig nach, ob der Code noch da ist?
      Mir ist klar das es eine Verständnisfrage ist. Sagen wir mal mein Script mit der Funktion heisst Wilhelm. Mein Seite ist leer und keine Sicht von Wilhelm. Jetzt lade ich in einem Div ein bissle html und auch Wilhelm rein und setze Wilhelm zwischen zwei Containern. Wilhelm bekommt jetzt Befehle und führt sie in sich selbst aus, schreibt variablen etc.
      Jetzt werfe ich Wilhelm aus dem Browser und er existiert nicht mehr. Keine Spur zu seiner Funktion und seinen Variablen.
      Ist das jetzt so ? Oder lagert das Script im Cache oder im Header der Seite noch?

      Gerne so erklären wie einem Kleinkind, damit ich das mal verinnerlichen kann.

      Kommentar


      • #4
        Die Definition einer Funktion kannst du dir wie die Definition einer Variablen vorstellen. Einmal durch "function xyz(){}" definiert existiert die Funktion, selbst dann noch, wenn der definierende Quelltext nichtmehr existiert.
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Auch wenn sie Lokal erstellt wurde ? Ich weiss das lokale Variablen, also Vars die erst innerhalb einer Funktion erstellt werden nur private Vars darstellen und auch nur innerhalb der Funktion verfügbar sind.

          Wenn ich jetzt eine Funktion innerhalb einer Funktion erschaffe, ist der Trick der anonymen Funktion ? Um sie von der aussenwelt fernzuhalten, so hat ich das jedenfalls verstanden. Scope und Context ist ja wohl nur der Fachbegriff dafür, wie Global und Lokal.

          Schön ist zu wissen das das Script auch ohne Quelltext noch vorhanden ist, das wusste ich echt nicht.

          Kommentar


          • #6
            Scope heißt Gültigkeitsbereich. Das ist mehr als nur "global" vs "lokal". Wenn etwas außerhalb einer Funktion ist ist es zwar nicht mehr lokal in dieser Funktion, aber deshalb noch lange nicht global.

            Kommentar


            • #7
              Ich such mir gerade Lektüre zum Thema Scope dann lese ich mir das lieber mal alles durch.
              Aber davon ab, könntet ihr mir einen heissen Tipp geben wie man mit mehrfach Timern umgeht?
              Werde ja nicht drumrumkommen eine Arrayliste mit Timern zu machen. Ich will das alle Timer gelöscht werden, wenn der Seiteninhalt mit dem script das es erstellt hat geleert wurde.

              Kommentar


              • #8
                Ganz heißer Tipp: http://www.php.de/php-einsteiger/489...nsammlung.html

                Mit Wilhelm (WTF?!) kommst Du nämlich nicht weit.

                Gerne so erklären wie einem Kleinkind, damit ich das mal verinnerlichen kann.
                Och nö, dafür such Dir mal ein anderes Forum. Kleinkinder machen wir hier nicht.

                [MOD: Close]
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar

                Lädt...
                X