2010-11-16 7 views
2

J'ai essayé de comprendre cela pendant un moment, mais maintenant je pensais que je voudrais juste poster ici et voir si je peux enfin comprendre ce problème avec setInterval que je suis.jQuery: Obtenir des erreurs étranges sur les appels setInterval ... ma syntaxe est-elle incorrecte?

Dans le cas où cela est important, j'utilise jQuery 1.4.4 dans ce document.

Compte tenu de ce qui suit:

var MS = {}, 
    MS.timer = 1200; // this both would be user accessible by the plugin 

// if the timer option is set then activate slideshow 
if (MS.timer) { setInterval("go(2,'right')" , MS.timer); } 

// show the slide (as defined by the pass ins) 
function go(slideNumber, direction) { 
    if (!paused || !running) { 
     console.log('run!'+', '+slideNumber+' , '+direction); 
    } 
} 

Il en résulte cependant dans:

go is not defined 

Ce qui est 'correctement' étant connecté tous les 1200 ms. Alors, comment puis-je exécuter ma fonction go(), y compris en passant dans les valeurs pour slideNumber, direction?

Répondre

3

Essayez ceci:

if (MS.timer) { setInterval(function() { go(2,'right'); }, MS.timer); } 

Ne peut pas dire de ce que vous avez publié, mais je suppose que ce code est tout à l'intérieur une fonction quelque part. La fonction "aller" devrait être globale pour que cela fonctionne. Lorsque vous passez juste une chaîne, l'interpréteur évalue cela dans le contexte global lorsque le temporisateur se déclenche. En utilisant une fonction réelle comme dans l'exemple que j'ai fourni, vous capturez ce "go" local dans une fermeture.

+0

Merci, qui a fait l'affaire. – Jannis

0

Essayez:

setInterval(function() { 
    go(2, 'right'); 
}, MS.timer); 
0

Essayez ceci:

window.setInterval(go, MS.timer, [2, 'right']); 
+1

Je pense que c'est une chose Firefox, et même alors je pense que les paramètres sont passés individuellement et non dans un seul tableau. – Pointy

+0

Vous avez raison. Cela ne va pas fonctionner dans IE. –

Questions connexes