2011-04-07 41 views
4

此代碼似乎不起作用......它僅在很長時間後才顯示twCharCount元素一次。難道只能有一個超時設置?任何建議使此代碼更好? 感謝您的任何意見...JavaScript中只能有一個超時嗎?

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); 

確定..對不起......我有種在寫這個......當然IM的 redecalring所有的時間是不是檸清醒。 ..這就是爲什麼所有執行snychronously ...

+2

可以有多個超時。你在賦值運算符中得到了+和=的錯誤方式,也沒有必要在第一次聲明後再次用var聲明t。最後,使用匿名函數而不是將字符串傳遞給超時,或傳遞一個命名函數;你可以緩存對名稱/匿名函數之外的jQuery包裝集合的引用 – 2011-04-07 16:41:00

+0

你打算做什麼? – 2011-04-07 16:41:59

+0

看起來像你想模仿一個很好的老式完全不贊成''thingy?那麼它會被棄用嗎? http://en.wikipedia.org/wiki/Blink_element – KooiInc 2011-04-07 17:09:07

回答

3
var intervalId = window.setInterval(function() { 
    $('#twCharCount').toggle(); 
}, 1000); 

並停止閃爍window.clearInterval(intervalId);

+0

哦,沒有考慮切換...... thx非常! – haemse 2011-04-07 16:42:46

+0

@Shaz,沒什麼,只是'$('#twCharCount').show()'很像jQuery代碼,但我當然可能在這裏是錯的。 – 2011-04-07 16:42:56

+0

@Shaz'$('#twCharCount')。show()'不是jQuery?它不能更混亂,然後OP解決方案不工作。 – 2011-04-07 16:43:04

2

難道僅僅是一些語法問題:

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;

,你不應該重新聲明牛逼了一遍又一遍。

0

活動超時的數量實際上沒有限制。

我沒有看到您的代碼有任何實際問題。問題可能不是超時而是您正在執行的命令。

其他注意事項(不涉及您的問題,但值得說的):

  • 您需要一個變量「VAR」聲明每個函數只有一次。
  • 代替定時器[...]我想在這種情況下使用timer.push()
  • 你可以使用一個單一的setInterval(),而不是
0
var show = false; 
window.setInterval(function() { 
    if(show) 
    { 
     show = false; 
     $('#twCharCount').show(); 
    } 
    else 
    { 
     show = true; 
     $('#twCharCount').hide(); 
    } 
}, 1000); 
+0

這是一個答案? – KooiInc 2011-04-07 16:55:09

+0

它通過代碼實現切換功能。 – 2011-04-07 16:56:24

+0

好吧,但然後Darin Dimitrovs答案看起來像一個更好的選擇... – KooiInc 2011-04-07 17:03:43

1

的代碼是錯誤的許多方法:(。
你的功能都被稱爲在同一個時間,因爲他們的時間(t)是一樣的。

如果你想增加t,你應該不會宣佈它在每個存取權限(只使用var t = ...一次;之後你可以a CCESS它通過它的名字: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); 

Sry基因,但我可以不幫我自己,這是你的優化代碼:

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

也許沒什麼......'= +'完成不過是一個簡單的任務。也許他嘗試了'+ ='並且遇到了問題,因爲這對初始化無效,但是正如你注意到的,解決方案是停止重新聲明變量。 – Shog9 2011-04-07 17:19:37

相關問題