Это классическое «использование переменной цикла внутри ошибки обратного вызова» - к тому времени, когда вызывается обратный вызов, значение i
устанавливается на его последнее известное значение вместо того значения, которое было на момент обратного вызова.зарегистрирован.
Попробуйте:
// _returns_ a new function that's bound to the specified selector
function setcolor(sel) {
return function() {
$(sel).animate({'color', 'orange'}, 400);
}
}
// set the callback to the function returned above
for (var i = 0; i < spans.length; ++i) {
window.setTimeout(setcolor('.spans' + i), 300 + 400 * i);
}
за ответ @cwolves - вам также нужно увеличить тайм-ауты, в противном случае все они сработают сразу, следовательно, 300 + 400 * i
в коде выше.