使用jquery在各种项目上显示n次,[加载DOM后生成的新元素的问题]

时间:2011-09-19 13:37:36

标签: timer jquery timeago

我正在使用Jquery插件http://timeago.yarp.com/来显示时间。

问题是timeago不会对动态生成的项目生效。

    $(document).ready(function() {

         $(".timeago").timeago();       // works perfectly fine for the items which are loaded on page load

         //$(".timeago").live(timeago());      // gives me an error ie timeago is not defined

         //$(".timeago").live($(".timeago").timeago());  // gives me an error too much recursion.
         jQuery.timeago.settings.allowFuture = true;
});

从一些谷歌搜索我知道的东西,即:

使用live与使用bind相同,只是它仅限于事件click,dblclick,keydown,keypress,keyup,mousedown,mousemove,mouseout,mouseover和mouseup。

现在怎么办才能导致我没有任何点击事件?我怎么绑这个?

2 个答案:

答案 0 :(得分:0)

看看这个主题 这里讨论了如何将timeago放在动态加载的项目上 例如ajax请求的结果。

Activate timeago on newly added elements only

PS:allowFuture与将timeago放在页面上新创建的项目上没有任何关系。它只允许将来的日期(即“3天”,“下周”)

答案 1 :(得分:0)

.live().bind()为活动分配回调。在您的情况下,您没有事件来分配函数,因此它失败。

理论上,您可以将回调分配给自定义事件。但是,无论何时生成项目,您都必须手动触发事件(使用.trigger())。例如:

$("abbr.timeago").live("timeago", function() {
   $(this).timeago();
});

// ... and in the bit that generates your item
$new_item.trigger("timeago")

演示:http://jsfiddle.net/ZjuW4/9

当然,在这种情况下使用.live() 纯粹是学术性的,并没有真正有用的目的

如果您有权访问生成项目的代码,则可以在生成项目时将.timeago()简单地链接到{{1}} ,即http://jsfiddle.net/ZjuW4/3/