如何在文档中使用javascript类准备好了

时间:2010-05-23 05:08:53

标签: javascript jquery counter

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

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

我认为文档中设置的所有内容都被包含在该范围内, 但是可以在其他文档就绪中调用函数。

有没有人能够解决我如何设置多个计数器斜杠对象的问题。 或者这些基本的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说它超时功能错误

谢谢,理查德

1 个答案:

答案 0 :(得分:1)

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

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


偏离主题:我建议您考虑使用匿名函数,因为它们可以使您的代码有时更加美观/清晰。