Может ли быть только один тайм-аут в JavaScript? - PullRequest
4 голосов
/ 07 апреля 2011

Этот код, кажется, не работает ... Он показывает элемент twCharCount только один раз после долгого времени.Может ли быть так, что может быть установлен только один тайм-аут?Есть предложения по улучшению этого кода?Спасибо за любой совет ...

var timer = new Array();
var t=0;
var step=1000;
counter.hide();
var t =+ step;
timer[0] = setTimeout("$('#twCharCount').show()",t);
var t =+ step;
timer[1] = setTimeout("$('#twCharCount').hide()",t);
var t =+ step;
timer[2] = setTimeout("$('#twCharCount').show()",t);
var t =+ step;
timer[3] = setTimeout("$('#twCharCount').hide()",t);
var t =+ step;
timer[4] = setTimeout("$('#twCharCount').show()",t);

ладно ... извините ... я вроде не проснулся, когда писал это ... конечно, я все время пересказываю... поэтому все они выполняются синхронно ...

Ответы [ 5 ]

3 голосов
/ 07 апреля 2011
var intervalId = window.setInterval(function() {
    $('#twCharCount').toggle();
}, 1000);

и перестать мигать window.clearInterval(intervalId);.

2 голосов
/ 07 апреля 2011

Могут ли быть некоторые проблемы с синтаксисом:

var timer = [];
var t=0;
var step=1000;
counter.hide();
t += step;
timer[0] = setTimeout("$('#twCharCount').show()", t);
t += step;
timer[1] = setTimeout("$('#twCharCount').hide()", t);
t += step;
timer[2] = setTimeout("$('#twCharCount').show()", t);
t += step;
timer[3] = setTimeout("$('#twCharCount').hide()", t);
t += step;
timer[4] = setTimeout("$('#twCharCount').show()", t);

t =+step; должно быть t += step;

, и вы не должны переопределять t снова и снова.

1 голос
/ 07 апреля 2011

Код неверен во многих отношениях: (.
Все ваши функции вызываются в одно и то же время, потому что их время (t) одинаково.

, если вы хотите увеличить tвам, вероятно, не следует объявлять его при каждом доступе (используйте var t = ... только один раз; после этого вы можете получить к нему доступ по его имени: t = ...), и вам, вероятно, следует использовать += вместо =+:
a += b является ярлыком для a = a + b, а a =+ b является ярлыком для a = parseInt(b).
Вы, вероятно, хотели написать:

var timer = [];
var t=0;
var step=1000;
counter.hide();
t += step;
timer[0] = setTimeout("$('#twCharCount').show()", t);
t += step;
timer[1] = setTimeout("$('#twCharCount').hide()", t);
t += step;
timer[2] = setTimeout("$('#twCharCount').show()", t);
t += step;
timer[3] = setTimeout("$('#twCharCount').hide()", t);
t += step;
timer[4] = setTimeout("$('#twCharCount').show()", t);

Еще одна вещь, лучше передатьФункция, чем строка, как первый параметр для setTimeout функции:

setTimeout(function(){$('#twCharCount').show();},t);

Извините, но я не могу помочь себе, это оптимизированный код для вас:

var timer = [],
step = 1000,
n = 4,
el = $('#twChartCount');
for(var i=0;i<n;i++)
    if(i%2)
        timer[i] = setTimeout(function(){el.hide();},i*step);
    else
        timer[i] = setTimeout(function(){el.show()},i*step);
0 голосов
/ 07 апреля 2011
var show = false;
window.setInterval(function() {
   if(show)
   {
      show = false;
      $('#twCharCount').show();
   }
   else
   {
      show = true;
      $('#twCharCount').hide();
   }
}, 1000);
0 голосов
/ 07 апреля 2011

Количество активных тайм-аутов практически не ограничено.

Я не вижу реальных проблем с вашим кодом.Возможно, проблема не в тайм-ауте, а в выполняемой вами команде.

Дополнительные примечания (не связанные с вашим вопросом, но стоит сказать):

  • Вам нужен 'var'оператор для переменной только один раз для каждой функции.
  • вместо таймера [...] Я бы использовал timer.push (), в этом случае
  • вы можете использовать один setInterval ()вместо
...