1

我将此倒计时脚本包装为位于单独文件中的对象

然后当我想设置一个计数器时,倒计时类中的超时功能无法再次找到我在文档中设置好的对象。

我有点明白在准备好的文档中设置的所有内容都适用于该范围,但是可以在其他准备好的文档中调用函数。

有没有人有关于如何设置多个计数器斜线对象的解决方案。或者那些基本的javascript类必须成为插件

这是课

  function countdown(obj)
{
    this.obj        = obj;
    this.Div        = "clock";
    this.BackColor      = "white";
    this.ForeColor      = "black";
    this.TargetDate     = "12/31/2020 5:00 AM";
    this.DisplayFormat  = "%%D%% Days, %%H%% Hours, %%M%% Minutes, %%S%% Seconds.";
    this.CountActive    = true;

    this.DisplayStr;

    this.Calcage        = cd_Calcage;
    this.CountBack      = cd_CountBack;
    this.Setup      = cd_Setup;
}

function cd_Calcage(secs, num1, num2)
{
  s = ((Math.floor(secs/num1))%num2).toString();
  if (s.length < 2) s = "0" + s;
  return (s);
}
function cd_CountBack(secs)
{
  this.DisplayStr = this.DisplayFormat.replace(/%%D%%/g,    this.Calcage(secs,86400,100000));
  this.DisplayStr = this.DisplayStr.replace(/%%H%%/g,       this.Calcage(secs,3600,24));
  this.DisplayStr = this.DisplayStr.replace(/%%M%%/g,       this.Calcage(secs,60,60));
  this.DisplayStr = this.DisplayStr.replace(/%%S%%/g,       this.Calcage(secs,1,60));

  //document.getElementById(this.Div).innerHTML = this.DisplayStr;

  $('#'+this.Div).text(this.DisplayStr);
  $('#tel').text(parseInt( $('#tel').text() )+1);


  if (this.CountActive) setTimeout(this.obj +".CountBack(" + (secs-1) + ")", 990);
}
function cd_Setup()
{
    var dthen   = new Date(this.TargetDate);
    var dnow    = new Date();
    ddiff       = new Date(dthen-dnow);
    gsecs       = Math.floor(ddiff.valueOf()/1000);
    this.CountBack(gsecs);
}

并设置它

$(document).ready(function() { 
  var cd1 = new countdown('cd1');
  cd1.Div = "clk";
 cd1.TargetDate = "08/15/2010 8:00 PM";
  cd1.DisplayFormat = "%%D%% days, %%H%% hours, %%M%% minutes, %%S%% seconds until event   AAA happens"; 
 cd1.Setup(); 

firebug 说超时功能出错

谢谢,理查德

4

1 回答 1

2

cd1 在本地范围内定义。setTimeout 将在 window [global] 范围内运行作为参数 1 传递的函数,在您的情况下,window.cd1 未定义。

您的问题的解决方案是使 cd1 成为全局变量。[删除 cd1 声明中的“var”]


题外话:我建议您考虑使用匿名函数,因为它们有时可以使您的代码更加漂亮/易读。

于 2010-05-23T05:43:45.373 回答