problème avec setTimeout “la fonction n'est pas de définir” !
problème avec setTimeout "la fonction n'est pas de définir" !
Quel est le problème dans ce code ?
$(document).ready(function(){
function ISS_NextImage() { //ImageSlideShow NextImage
$('.ImageSlideShow').each(function() {
alert($(".correntImage", this).text());
});
}
var t=setTimeout("ISS_NextImage();",1000);
});
OriginalL'auteur faressoft | 2010-09-20
Vous devez vous connecter pour publier un commentaire.
Lorsque vous
eval
code, c'est fait dans la portée globale. Depuis la fonction que vous tentez d'appeler localement étendue, cela échoue.Passer à la fonction de
setTimeout
au lieu de passer d'une chaîne àeval
ed.setTimeout
qui se passe est dans le champ d'application dans lequeleval
qui se passe. Ce qui ne change pas la sagesse de votre base de la recommandation de ne pas utiliser des chaînes de caractères, mais des références de fonction.OriginalL'auteur Quentin
Essayez de changer votre set timeout appel:
Une fonction qui ne fait rien sauf l'appel d'une autre fonction sans arguments est généralement une mauvaise idée.
Mais si vous ne voulez inclure des arguments avec
ISS_NextImage()
, ce serait la voie à suivre..... et qui serait assez commun avec un à côté de l'image que vous voulez faire quelque chose commevar t=setTimeout(function(){ISS_NextImage((imageIndex + 1) % numImages);},1000);
généralement j'utilise ce format pour plusieurs raisons. 1) pour aider À briser les habitudes des développeurs qui passent des chaînes qui sont evaled à settimeout et 2) pour être en mesure d'obtenir la fermeture et facilement contourner le problème de 'cette' être à la fenêtre d'un objet en faisant quelque chose comme ceci: var self=this; setTimeout(function(){ISS_NextImage(auto);},1000); Dans mon expérience, les nouveaux développeurs ne comprennent pas la portée en javascript et en passant le nom de la fonction que vous êtes réellement l'envoi de la fenêtre.fonction (la plupart du temps) c'est pourquoi je trouve qu'il est préférable d'utiliser cette syntaxe autour de nouveaux développeurs.
OriginalL'auteur mcgregok
Éviter de passer d'une chaîne à setTimeout(). Il suffit de passer une référence à la fonction à la place:
OriginalL'auteur istruble
vous pouvez également:
new
mot-clé est ... bizarre.OriginalL'auteur Ryan Ternier
Vous pourriez faire quelque chose comme ceci:
OriginalL'auteur Joris Kok