2012-07-22 44 views
-1

我有一組<span>有編號的標識,我想與Id=1等待添加類<span> 3秒刪除類不是添加類<span id=2>等等等等...而循環中調用的setTimeout不工作

如何讓這段代碼工作。 while循環無法呼叫setTimeout任何人都可以幫忙嗎?

var spanSet = 4; 
var spanId = 1; 
while (spanSet != 0) { 
    changeClass(); 
    spanSet--; 
} 

function changeClass() { 
    $('#' + spanId).addClass("hilite"); 
    setTimeout(remove, 1000); 
    spanId++; 
} 

function remove() { 
    alert('remove'); 
    $('#' + spanId).removeClass("hilite"); 
    return true; 
} 
+0

你爲什麼不在span頭文件中使用'spanId'(而不是'spanSet')? – 2012-07-22 14:35:15

+0

這就是爲什麼問題應該描述你想要做什麼,而不是你認爲是錯誤的。 TJC有正確的想法... – Alnitak 2012-07-22 14:42:09

+0

循環超時。有些東西在邏輯上是錯誤的。 spanId不保留 – 2012-07-22 14:42:41

回答

1

查看this jsfiddle查看您代碼中實際發生了什麼。

取出while循環,並將其設置是這樣的(見jsfiddle):

var spanId = 1; 
changeClass(); 

function changeClass(){ 
$('#'+spanId).addClass("hilite"); 
spanId+=1; 
setTimeout(remove, 500); 
} 

function remove(){ 
$('#'+(spanId-1)).removeClass("hilite"); 
if (spanId<6){ 
    changeClass(); 
} 
} 
+0

'var spanId = 1; changeClass(); function changeClass(){ $('#'+ spanId).addClass(「hilite」); setTimeout(remove,3000); //你的意思是3000我想? } function remove(){ spanId ++; $('#'+ spanId).removeClass(「hilite」); if(spanId <3)//你也可以使用spanId spanset並使用spanId <5 changeClass(); }' 使用這種方式,但刪除功能不工作 – 2012-07-22 15:17:35

+0

@snjib:見編輯和鏈接jsfiddle。 – KooiInc 2012-07-22 16:02:47

0

這將是最簡單的使用jQuery的動畫功能。

這是多數民衆贊成所需的所有:在http://jsfiddle.net/alnitak/Bs8kj/

對於一個更通用的其中一個假設一無所知的ID

var spanId = 1; 

(function hilite() { 
    $('#' + spanId).addClass('hilite').delay(3000).queue(function() { 
     $(this).removeClass('hilite').dequeue(); 
     if (++spanId < 5) { 
      hilite(); 
     } 
    }); 
})(); 

工作演示,並且不需要外部變量,試試這個:

(function hilite(a) { 
    $(a.shift()).addClass('hilite').delay(3000).queue(function() { 
     $(this).removeClass('hilite'); 
     if (a.length) { 
      hilite(a); 
     } 
    }); 
})(['#1', '#2', '#3', '#4']); 

注意:數字ID是一個HTML5的東西。它們也不受CSS的支持。

+0

這比我的好。更多的jQuery喜歡。 – 2012-07-22 16:12:49