antipetya
@antipetya
интересующийся

Не могу понять: почему таймер вызывается мгновенно а не через 3 секунды?

function baloon(id,text)
{
    var obj = document.getElementById(id);
    var child=obj.children;
    var tip = document.createElement("span");
    tip.className="baloons";
    var count=child.length;
    tip.style.bottom=20*count+' px';
    var t = document.createTextNode('text:'+text+' count_tips:'+count+' must_be_style.bottom:'+16*count+' real_bottom:'+tip.style.bottom);
    tip.appendChild(t);
    obj.appendChild(tip);
    setTimeout(hide(id,count),3000);
}

function hide(id,count)
{
  
   var obj = document.getElementById(id,count);
   var child=obj.children[count];
   obj.removeChild(child);
}


если заменить obj.removeChild(child); каким-нибудь алертом, например выводящим child.innerHTML то тултипы появляются. Алерт вылазит моментально.

Если оставить как есть - то тултипы не появляются. Значит сразу же срабатывает таймер.

Я же указываю - 3000 мс
  • Вопрос задан
  • 2204 просмотра
Решения вопроса 1
morozovdenis
@morozovdenis
setTimeout принимает параметр, в вашем случае вы передаёте результат выполнения функции hide

setTimeout(function(){hide(id,count);},3000);

разница вот в чём:

вот просто передача функции которую надо вызвать, но так нельзя передать ей параметры:
setTimeout(hide,3000);

если добавить параметры и скобочки, то это будет означать вызов функции и она вызовется в момент создания таймера:
setTimeout(hide(id,count),3000);

поэтому создаём анонимную функцию и помещаем туда вызов того что нам нужно, используя замыкание для передачи параметров:
setTimeout(function(){hide(id,count);},3000);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Scorpi
@Scorpi
setTimeout(function() {
  hide(id,count);
},3000);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы