J'essaie d'utiliser une déclaration de jQuery dans une fonction de sécurité, mais
Je ne comprends pas ça pour travailler. J'ai essayé beaucoup de variantes, comme celui-ci (je suis
en utilisant 'ceci' parce que le Settimeout est à l'intérieur d'une fonction, et
Le sélecteur est mis en cache / stocké dans un objet, donc le sélecteur $): Comment dois-je écrire ceci? p> Merci! p> p>
4 Réponses :
Vous pouvez probablement faire quelque chose comme ça, si les variables que vous essayez d'utiliser sont définies à chaque étape de la boucle.
var myObj = { $selector: myConfigObj.$myCachedSelector } $.each([ myObj, mySecondObj, myThirdObj ], function(n, $selector) { setTimeout(function() { $selector.val(saveVal); }, 1); });
Marco, "myconfigobj. $ Mycachedselector" semble être le problème. Il retourne "indéfini". Je l'ai remplacé par une simple chaîne qui est retournée correctement ...
Lorsque vous devez conserver le courant Ceci code> lorsque vous appelez Settimeout Utilisez cette structure: -
setTimeout((function(self) {
return function() { $selector.val(self.savVal) };
})(this), 1);
Élégant si un peu cryptique aux gens ne connaissant pas la fermeture. Sentez-vous stupide ce n'était pas la première chose qui vous a pris à l'esprit lorsque j'ai réalisé que c'est-à-dire ne pas passer des paramètres. Je plaidèle ".NET Developer" comme excuse. C'est une chose, non?
Merci pour vos réponses.
J'utilise une fonction à l'intérieur du Settimeout maintenant. Mais j'ai découvert que le vrai problème est situé elswhere: dans la fonction de chaque fonction, j'essaie d'accéder aux propriétés de l'objet qui pointe vers des propriétés dans un objet de configuration, mais le résultat (par exemple pour cela. Sélecteur $) est "indéfini" . P>
var myObj = { $selector: myConfigObj.$myCachedSelector } $.each([ myObj, mySecondObj, myThirdObj ], function() { //code });
anthonywjones strong> a fourni une excellente réponse, mais il y en a un autre similaire, ce qui est légèrement plus facile à écrire et à lire. Vous stockez simplement la valeur de "ceci" dans une variable locale., IE. var storedThis = this;
setTimeout(function() { $selector.val(storedThis.savVal); }, 1);
Strings dans
Settimeout () Code> et
Seinterval () Code> sont obsolètes. Les fonctions doivent être utilisées à la place.