Как использовать класс Javascript из документа готов - PullRequest
1 голос
/ 23 мая 2010

У меня есть сценарий обратного отсчета, обернутый как объект, расположенный в отдельном файле

Затем, когда я хочу настроить счетчик, функция тайм-аута в классе обратного отсчета не может снова найти объект, который я настроил в готовом документе.

Я понимаю, что все, что настроено в документе, готово к этому, однако можно вызывать функции из другого готового документа.

Есть ли у кого-нибудь решение о том, как я могу настроить несколько счетчиков слеш-объектов. Или эти базовые классы 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 Ответ

1 голос
/ 23 мая 2010

cd1 определяется в локальной области. setTimeout запустит функцию, переданную как параметр 1 в области видимости окна [global], а в вашем случае window.cd1 не определен.

Решением вашей проблемы было бы сделать cd1 глобальной переменной. [Удалите «var» из вашей декларации cd1]


Не по теме: я рекомендую вам использовать анонимные функции, так как они иногда могут сделать ваш код более красивым / разборчивым.

...