2010-11-08 4 views
1

Pouvez-vous me dire pourquoi cela fonctionne:Javascript setTimeout

PageMethods.UpdateForcedDisposition(forcedDisposition, a.value, SucceededCallback, FailedCallback); 

Lorsque cela ne fonctionne pas?

setTimeout("PageMethods.UpdateForcedDisposition(" + forcedDisposition + "," + a.value + ", SucceededCallback, FailedCallback);", 1000); 

Fait intéressant, un appel similaire fonctionne avec setTimeout:

setTimeout("PageMethods.UpdateSales(" + id + ", " + a.value + ", SucceededCallback, FailedCallback);", 1000); 

... Je suis perplexe!

Répondre

6

Évitez de transmettre une chaîne à setTimeout. Lorsque cela est possible, utiliser des fonctions anonymes:

window.setTimeout(function() { 
    PageMethods.UpdateForcedDisposition(
     forcedDisposition, 
     a.value, 
     SucceededCallback, 
     FailedCallback 
    ); 
}, 1000); 

A setTimeout avec une chaîne exécute dans le champ global. Si vous essayez de référencer des variables de la portée actuelle, vous obtiendrez une erreur.