2017-09-25 34 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(); 
    } 
}); 
相关问题