Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeout内的代码未按预期顺序触发_Javascript_Jquery_Setinterval - Fatal编程技术网

Javascript setTimeout内的代码未按预期顺序触发

Javascript setTimeout内的代码未按预期顺序触发,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,这里是newby newb…我认为这个特定的问题以前在这个网站上没有被解决过,我搜索了又搜索,但找不到任何有效的东西。我想显示正在加载的图像。我在setTimeout之前隐藏它,然后在setTimeout结束时显示它。我读到的所有东西都说这应该行得通,但实际上不行。在脚本运行完成之前,我的图像会立即出现,然后消失。有什么想法吗?谢谢 function createHTML(data, listName) { var arr = data.d.results; $(".save").o

这里是newby newb…我认为这个特定的问题以前在这个网站上没有被解决过,我搜索了又搜索,但找不到任何有效的东西。我想显示正在加载的图像。我在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);  
  });
}

对于与选择器匹配的每个元素,将调用传递给每个的回调函数

看起来您只想在为所有元素调用回调后调用
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();
  }
});

对于与选择器匹配的每个元素,将调用传递给每个的回调函数

看起来您只想在为所有元素调用回调后调用
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();
  }
});

抱歉刚才看到了你的链接。谢谢嘿,sumeet…我通读了那篇文章,我的setTimeout内容已经有了一个包装器函数,但它仍然不会等到setTimeout中的所有内容都完成后才隐藏我的加载图像。根据那篇文章,我看不出我错在哪里。我有什么遗漏吗?再次感谢您对初学者的帮助!如果你能使代码更简单,它将很容易告诉你,并提供一个解决方案。。。若要开始调试,请在settimeout中输入正确的元素或不喜欢console log($this),请查看其所指内容。@sumeet kumar谢谢您的指导。我在setTimeout内外记录了$(这个),你是对的,它们是不同的。我现在已经尝试了您发送的文章中的多种解决方案,但没有任何改变。下面是上面的一些简化代码。有什么想法吗?再次感谢你的智慧:edti:抱歉刚才看到了你的链接。谢谢嘿,sumeet…我通读了那篇文章,我的setTimeout内容已经有了一个包装器函数,但它仍然不会等到setTimeout中的所有内容都完成后才隐藏我的加载图像。根据那篇文章,我看不出我错在哪里。我有什么遗漏吗?再次感谢您对初学者的帮助!如果你能使代码更简单,它将很容易告诉你,并提供一个解决方案。。。若要开始调试,请在settimeout中输入正确的元素或不喜欢console log($this),请查看其所指内容。@sumeet kumar谢谢您的指导。我在setTimeout内外记录了$(这个),你是对的,它们是不同的。我现在已经尝试了您发送的文章中的多种解决方案,但没有任何改变。下面是上面的一些简化代码。有什么想法吗?再次感谢你的智慧: