Le premier paramètre de setTimeout
(ou setInterval
) doit être une référence à une fonction (ou une chaîne, mais vous ne voulez pas utiliser la syntaxe des chaînes).
Au lieu de passer une fonction en tant que paramètre, vous appelez une fonction et passez son résultat. Si vous enlevez les parenthèses, vous passerez une référence à la fonction :
timer[i] = setTimeout(jQuery(this).remove, i * 5000)
Mais alors vous commencerez à avoir des problèmes avec this
étant la mauvaise chose au moment où la fonction s'exécute réellement. Essayez quelque chose comme ça :
var i = 1,
timer = [];
jQuery('a').each(function($) {
i++;
var $this = jQuery(this);
timer[i] = setTimeout(function() {$this.remove();}, i * 5000)
})
Cela permet de tirer parti du fonctionnement des fermetures en ce sens que la fonction anonyme transmise à setTimeout
aura accès à la $this
au moment où il est exécuté, même si la fonction dans laquelle il est exécuté n'a pas été modifiée. $this
est déclaré aura fini de s'exécuter à ce moment-là.
Notez qu'il est préférable de déclarer les tableaux avec l'option []
que new Array()
.
Notez également que vous initialisez i
à 1, puis l'incrémenter avant de l'utiliser de sorte que le premier élément que vous ajoutez à votre tableau sera timer[2]
. Vous devriez probablement l'initialiser à 0 et l'incrémenter après le réglage de chaque minuterie.