目前我正在使用别人的基于JS的倒计时器。当我获取计时器时,我只需将一个值附加到倒数计时器的类中,如下所示:
在PHP中:
$rows = mysql_num_rows($result);
for ($j = 0 ; $j < $rows ; ++$j){
<span id="countdown'.($j+1).'">
}
确保计时器的唯一ID。
问题在于,当我开始使用AJAX使用计时器刷新页面部分时,新的计时器不起作用,因为ID不再是唯一的。
有什么想法解决这个问题吗?不知道是否有一个更简单的倒数计时器插件?
我在这里使用计时器。 http://andrewu.co.uk/clj/countdown/
有关如何跟踪已使用的ID的任何想法?
答案 0 :(得分:0)
请参阅您引用的计时器文档中有关如何执行多个倒计时器的说明:http://andrewu.co.uk/clj/countdown/。
如果您要使用该代码并拥有多个计时器,那么您只需按照文档说明对ID进行连续编号,这样您就不会出现任何ID冲突,因此计时器代码可以找到每个定时器。
我不知道你的ajax代码对页面做了什么,但如果它还添加了一个新的计数器,它将必须计算使用的正确ID(下一个可用的顺序ID是什么)。
如果您不需要在同一页面中有多个计数器,那么我不确定为什么会出现问题。只需确保ajax调用不会添加另一个计时器或任何冲突的ID。
首先,我没有看到您使用的计数器代码处理动态添加内容的任何方式。它在页面完成加载时初始化页面中存在的计数器。在那之后,它永远不会看到另一个计数器,无论你是否给它一个好的ID。因此,无论如何,必须修改计数器代码以处理添加了ajax的计数器。
其次,改变计数器代码中的CD_Init()
函数以支持“寄存器”功能并不难,在这个函数中,你传递了你想要作为一个计数器而不是它的行为的任何对象的ID。有点愚蠢的设计循环连续ID寻找存在的东西。这适用于一个计数器,但N计数器有问题。
第三,如果它现在拥有的“autofind”功能由于某种原因(我不是它的粉丝)是有用的,那么我将它改为使用一个唯一的类名(所以多个对象都可以相同的HTML并作为计数器启用)我将添加一个ReInit()
函数,在将动态内容添加到页面后,可以调用该函数重新扫描具有该类名的对象。
如果您需要在较旧的浏览器(本身不支持该功能)中按类名查找元素,则可以通过多种方式执行此操作。我个人使用Sizzle库来检测函数是否内置并使用它,如果不是,但如果没有,则回到手工编码的方式。 jQuery,YUI3和其他库都有自己的实现或在内部使用Sizzle实现。