【问题标题】:jQuery - setInterval with $.eachjQuery - setInterval 与 $.each
【发布时间】:2014-02-01 00:32:45
【问题描述】:

我要扯掉我的头发了。我正在尝试与我的 PHP 函数进行交互,该函数正在测量一些时间:timeSince() 发布了一个帖子。

我不需要在 jQuery 中执行此操作的插件,谢谢 :o)

但我不想在所有 .post-box-time div 上运行 $.get(),因此我使用的是 $.each。但它只是更新最后一个元素,但给了我其他 div 的结果。 -> 这就像它没有做 $.each()..

这是我的代码:

setInterval(function() {
        $('.post-box-time').each(function() {
            var time = $(this).attr('data-time');
            $this = $(this);

            $.get("sys/calls.handler.php", { do: 'timeSince', data: time },
                function(data){
                    $this.html(data);
                });
        }); // each function
    }, 1000);

【问题讨论】:

  • 如果您打开控制台,您是否看到多个传出请求? (和.post-box-time的数量一样吗?
  • 有 2 个 .post-box-time ,我看到他们都被解雇了。
  • 您的代码看起来应该可以工作。
  • 对我来说这不是我的问题。它通过将 var 放在 $this 前面来工作... $(this) 根本不起作用。没有返回任何内容

标签: javascript jquery


【解决方案1】:

你应该在声明$this之前抛出一个var

您将其声明为全局变量,而不是在 each() 运行的每个函数的范围内(这是 var 所做的)声明它。因此,当您的响应回调实际上被触发时,您的循环有已经完成并将全局变量$this(或window.$this)设置为通过each()循环时找到的最后一个.post-box-time的值

【讨论】:

  • @Kolind 没有var$this 被声明为全局变量而不是局部变量。 stackoverflow.com/q/1470488
  • @JonathanLonowski 太棒了。非常感谢 :) 'var' 可以使整个功能正常工作,这真是太棒了。我喜欢编程:)
  • 您将其声明为全局变量,而不是在each() 运行的每个函数的范围内(这是var 所做的)。因此,当您的响应回调实际上被触发时,您的循环已经完成并将全局变量 $this(或 window.$this)设置为它在通过 each() 循环时找到的最后一个 .post-box-time 的值。
【解决方案2】:

使用async 选项。这个Thread 与您的问题有关。

希望这会对你有所帮助。

【讨论】:

    【解决方案3】:

    我认为每个函数中的 this 是对原始 DOM 元素的引用。 .each 给出从 0 开始的索引,所以你应该改用$('.post-box-time:eq(' + i + ')')

    【讨论】:

      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      • 2011-08-20
      • 1970-01-01
      • 2014-04-26
      相关资源
      最近更新 更多