Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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
Livestamp.js通过jQuery手动触发_Jquery_Timeago_Livestamp.js - Fatal编程技术网

Livestamp.js通过jQuery手动触发

Livestamp.js通过jQuery手动触发,jquery,timeago,livestamp.js,Jquery,Timeago,Livestamp.js,我正在使用一个名为Livestamp.js()的自动timeago插件。它似乎与moment.js协作来自动转换: 为此: 8分钟前 在每个时间间隔 但我不喜欢这样,因为在最终自动转换之前,故障会在几毫秒内被观察到。因此,我希望通过jQuery手动执行此操作,因此如果执行了.append(),我希望立即转换 我试过这么做 $('div').append(data).promise().done(function() { $(this).find('span[data-livestamp

我正在使用一个名为Livestamp.js()的自动timeago插件。它似乎与moment.js协作来自动转换:

为此:

8分钟前

在每个时间间隔

但我不喜欢这样,因为在
最终自动转换之前,故障会在几毫秒内被观察到。因此,我希望通过jQuery手动执行此操作,因此如果执行了
.append()
,我希望立即转换

我试过这么做

$('div').append(data).promise().done(function() {
    $(this).find('span[data-livestamp]').livestamp($(this).data('livestamp'));
});
但它不起作用。
确实是立即转换的,但是“几秒钟前”,而实际上是6天前

如何做到这一点

更新将代码更改为更易于理解。

$(此)。数据('livestamp')
$(此)
引用了错误的对象。相反,使用
对livestamps进行迭代。在
内部。每个(函数(){…})
这将引用Livestamp span:

$('div').append(data).promise().done(function() {
    $(this).find('span[data-livestamp]').each(function () {
      $(this).livestamp($(this).data('livestamp'));
    });
});

之前的答案(如评论所示,不相关):

如果有延迟,jQuery在应用代码之前也会有类似的延迟

所有客户端JavaScript都是这样工作的:JavaScript嵌入到页面中,因此,浏览器首先加载页面,然后在该页面上加载并运行JavaScript。在JavaScript运行之前,您会注意到事情的旧状态

相反,为了避免延迟,请通过服务器端语言提供默认值,以便提供此HTML:

<span data-livestamp="1488615741">8 minutes ago</span>
这样,PHP生成的文本将在Livestamp开始工作之前显示,JavaScript代码将负责使时间引用保持最新


当然,您可能会使用不同的服务器端语言、不同的变量名和不同的库,这只是一个例子。

我在解释您遇到的问题时遇到了一些问题。实际上,jQuery或客户端对我来说没问题,如果我喜欢上面的帖子,就不会有明显的延迟。我在这里提出的唯一问题是,如何使用
.livestamp()
编写手动调用来触发更改,而不是等待插件的时间间隔来执行更改?我想我只是有错误的代码,因为它转换为“几秒钟前”,而实际上是6天前。谢谢你的评论,现在我更好地理解了这个问题!我已经更改了答案,请检查新的解决方案是否有效。终于找到问题了!非常感谢。这只是因为我没有使用
.each()
:”)我的坏习惯
<?php $timeAgo = new Westsworld\TimeAgo(); ?>
<span data-livestamp="<?= $time; ?>"><?= $timeAgo->inWords('@' . $time); ?></span>