Первый параметр setTimeout
(или setInterval
) должен быть ссылкой на функцию (или строку, но вы не хотите использовать строковый синтаксис).
ВместоПередав функцию в качестве параметра, вы вызываете функцию и передаете ее результат.Если вы удалите скобки, вы передадите ссылку на функцию:
timer[i] = setTimeout(jQuery(this).remove, i * 5000)
Но тогда у вас начнутся проблемы с this
, который будет неправильным во время выполнения функции.Попробуйте что-то вроде этого:
var i = 1,
timer = [];
jQuery('a').each(function($) {
i++;
var $this = jQuery(this);
timer[i] = setTimeout(function() {$this.remove();}, i * 5000)
})
Это использует преимущества работы замыканий в том, что анонимная функция, переданная в setTimeout
, будет иметь доступ к переменной $this
во время ее запуска, даже еслифункция, в которой объявлено $this
, к тому времени завершит выполнение.
Обратите внимание, что лучше объявить массивы с []
, чем new Array()
.
Обратите внимание, что вы инициализируете i
до 1, затем увеличьте его перед использованием, чтобы первый элемент, который вы добавили в ваш массив, был timer[2]
.Вам, вероятно, следует инициализировать его равным 0, а затем увеличивать его после установки каждого таймера.