2012-07-22 46 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