2017-09-25 3 views
1

newby newb hier ... Ich glaube nicht, dass dieses spezielle Problem zuvor auf dieser Website angesprochen wurde, habe ich gesucht und gesucht, kann aber nichts finden, was funktioniert. Ich möchte ein Ladebild anzeigen. Ich verstecke es vor meinem setTimeout und zeige es dann am Ende des setTimeouts. Alles, was ich gelesen habe, sagte, das sollte funktionieren, tut es aber nicht. Mein Bild erscheint und verschwindet sofort, bevor mein Skript fertig ist. Irgendwelche Ideen? Vielen Dank!Code innerhalb von setTimeout wird nicht in der erwarteten Reihenfolge

function createHTML(data, listName) { 

    var arr = data.d.results; 

    $(".save").on("click",function(event){ 

    // HERE IS WHERE I SHOW MY LOADING IMAGE INITIALLY 
    $('.logoImg').show(); 


    // SET TIMEOUT FUNCTION 
    setTimeout(function() { 

     $("input.title").each(function(){ 
     var title = $(this).val() ? $(this).val() : null;  
     var currentUserRequest = GetCurrentUser(); 

     (function (userData) { 
      updateListItem(_spPageContextInfo.webAbsoluteUrl,'MyList',id,itemProperties,printInfo,logError); 

      function printInfo() { 
      console.log('Item has been UPDATED!'); 
      } 

      function logError(error){ 
      console.log(JSON.stringify(error)); 
      }     
     }); 
     }); 

     // THIS IS FIRING BEFORE THE ABOVE EACH STATEMENT 
     $('.logoImg').hide(); 
    }, 0); 
    }); 
} 
+1

https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout#The_this_problem –

+0

EDTI: sorry Ihr Link nur sah. Vielen Dank! –

+0

Hey sumeet ... Ich habe diesen Artikel gelesen und ich habe bereits eine Wrapper-Funktion um meinen setTimeout-Inhalt, aber es wartet immer noch nicht, mein Lade-Image zu verstecken, bis alles andere im setTimeout fertig ist. Ich kann anhand dieses Artikels sehen, wo ich falsch liege. Gibt es etwas, das mir fehlt? Danke nochmal, dass du einem Anfänger geholfen hast! –

Antwort

0

Die Callback-Funktion each übergeben wird für jedes Element aufgerufen werden, die die Wähler übereinstimmt.

Sie möchten hide() nur aufrufen, nachdem der Rückruf für alle Elemente aufgerufen wurde.

Um dies zu erreichen, müssen Sie es nach dem letzten Rückruf aufrufen.

So etwas sollte funktioniert:

var titles = $("input.title"); 
var length = title.length; 
titles.each(function(index, element) { 
    // Do what you need 
    if(index == (length-1)) { 
    // We are now on the last one 
    $('.logoImg').hide(); 
    } 
}); 
Verwandte Themen