2017-09-25 89 views
1

newby newb here ...我不認爲這個特定的問題已經在這個網站上解決過,我已經搜索和搜索,但找不到任何有效的。我想顯示一個加載圖像。我將它隱藏在setTimeout之前,然後在setTimeout結束時顯示。我讀過的所有內容都說這應該可行,但事實並非如此。在我的腳本完成運行之前,我的圖像出現,然後立即消失。有任何想法嗎?謝謝!setTimeout中的代碼沒有按照預期的順序發射

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:對不起,剛纔看到您的鏈接。謝謝! –

+0

嘿sumeet ...我通讀了那篇文章,並且我已經在我的setTimeout內容周圍有一個包裝函數,但它仍然不會等待隱藏我的加載圖像,直到setTimeout中的所有內容都完成爲止。根據那篇文章,我可以'看到我要去的地方。有什麼我失蹤?再次感謝幫助初學者! –

回答

0

傳遞給each回調函數將被調用爲每個選擇器元件相匹配。

它看起來像只有在爲所有元素調用回調後才需要調用hide()

要完成此操作,需要在最後一次回調後調用它。

像這樣的東西應該工作:

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(); 
    } 
});