如何在嵌套中继器中使用javascript计时器?

如何在嵌套中继器中使用javascript计时器?,javascript,c#,jquery,asp.net,timer,Javascript,C#,Jquery,Asp.net,Timer,我正在尝试为产品添加javascript计时器,如果该项目有促销,则显示计时器并开始倒计时。。所以我要做的是将结束日期从code behind发送到javascript函数,该函数根据结束日期创建计时器。我已经尝试了很长一段时间,但脚本仍在运行,问题是我无法在嵌套的中继器中循环以获得正确的倒计时控件id和索引。 希望你们能帮我解决这个问题。 谢谢 HTML代码: <asp:Repeater runat="server" ID="Repeater1" OnItemDataBo

我正在尝试为产品添加javascript计时器,如果该项目有促销,则显示计时器并开始倒计时。。所以我要做的是将结束日期从code behind发送到javascript函数,该函数根据结束日期创建计时器。我已经尝试了很长一段时间,但脚本仍在运行,问题是我无法在嵌套的中继器中循环以获得正确的倒计时控件id和索引。 希望你们能帮我解决这个问题。 谢谢

HTML代码:

        <asp:Repeater runat="server" ID="Repeater1" OnItemDataBound="rptdep_ItemDataBound" OnItemCommand="rptdep_Details_Command">
        <ItemTemplate>
            <asp:LinkButton class="navbar-brand" runat="server" ID="LinkButton1" Style="text-decoration: none; margin-right: -25px; border: none; font-size: medium" CommandArgument='<%#Eval("department_code") %>' CommandName="more">
                <asp:Repeater runat="server" ID="rptdeppromo" OnItemDataBound="rptdeppromo_ItemDataBound" OnItemCommand="Item_depPromo_Command">
                    <ItemTemplate>
                        <div runat="server" id="countdown" class="cntdwn"></div>
                    </ItemTemplate>
                </asp:Repeater>
        </ItemTemplate>
    </asp:Repeater>
C#父中继器代码:

protected void rptdep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Repeater innerRepeater2 = (Repeater)e.Item.FindControl("rptdeppromo");
        DataRowView drv = (DataRowView)(e.Item.DataItem);

        }
    }
}
protected void rptdeppromo_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView drv = (DataRowView)(e.Item.DataItem);

DateTime EndDate = Convert.ToDateTime(Convert.ToDateTime(drv.Row["publishtdt"]).ToString("dd MMM yyyy"));


        int countw = 0;
        int count = 0;

        if (total < 30)
        {
            count += 1;
            foreach (RepeaterItem item in rptdep.Items)
            {
                countw += 1;
            }
            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "counter" + countw, "producttimer('" + countw + "','" + EndDate + "', '" + e.Item.ItemIndex + "');", true);
        }
        else
        {

        }
    }
}
C#嵌套中继器代码:

protected void rptdep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Repeater innerRepeater2 = (Repeater)e.Item.FindControl("rptdeppromo");
        DataRowView drv = (DataRowView)(e.Item.DataItem);

        }
    }
}
protected void rptdeppromo_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DataRowView drv = (DataRowView)(e.Item.DataItem);

DateTime EndDate = Convert.ToDateTime(Convert.ToDateTime(drv.Row["publishtdt"]).ToString("dd MMM yyyy"));


        int countw = 0;
        int count = 0;

        if (total < 30)
        {
            count += 1;
            foreach (RepeaterItem item in rptdep.Items)
            {
                countw += 1;
            }
            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "counter" + countw, "producttimer('" + countw + "','" + EndDate + "', '" + e.Item.ItemIndex + "');", true);
        }
        else
        {

        }
    }
}
受保护的void rptdepromo_ItemDataBound(对象发送方,RepeaterItemEventArgs e)
{
如果(e.Item.ItemType==ListItemType.Item | | e.Item.ItemType==ListItemType.AlternatingItem)
{
DataRowView drv=(DataRowView)(e.Item.DataItem);
DateTime EndDate=Convert.ToDateTime(Convert.ToDateTime(drv.Row[“publishtdt”]).ToString(“dd-MMM-yyyy”);
int countw=0;
整数计数=0;
如果(总数<30)
{
计数+=1;
foreach(RPDep.Items中的RepeaterItem项目)
{
countw+=1;
}
ScriptManager.RegisterStartupScript(this.Page,this.GetType(),“counter”+countw,“producttimer”(“+countw+”,“+EndDate+”,“+e.Item.ItemIndex+”);”,true);
}
其他的
{
}
}
}

这里有一种不同的方法:

1-在您的repeater中,在标签中显示所有促销结束日期,并将其设为同一类别“cntdwn”

2-您的JS,当页面准备就绪时,它将使用相同的类查看页面中的所有项目,并在其中循环:

      var elements = document.getElementsByClassName("cntdwn");
      for (var i = 0, len = elements.length; i < len; i++) 
        {
         var PromoID = elements[i].Id;
         Var EndDate  = document.getElementById(PromoID).textContent;
        }
var elements=document.getElementsByClassName(“cntdwn”);
for(var i=0,len=elements.length;i
3-现在您有了标签ID和结束日期,使用倒计时逻辑在该ID的文本区域显示倒计时


祝你好运…

投票结果对我来说很有效,但我需要调整一下。我想一些代码可能会帮助下一个看这里的人。 使用插件jquery.countup.js(任何计数器都应该工作):


$(函数(){
var elements=document.getElementsByClassName('countdown');
var len=elements.length;
对于(变量i=0;i
成功了,只是在脚本中添加了一些调整。。谢谢你,伙计。。干杯请注意你必须做的不同。事实上,我并没有做太多的不同,但我花了一些时间才找到如何在中继器上放置项目索引。我认为下一个人可能会从完整代码中受益,而不是部分代码。