Étant donné le code suivant, pourquoi ai-je des valeurs différentes pour a
et b
? J'aurais pensé qu'ils reviendraient la même chose:Comportement du sélecteur Jquery en cache que je ne comprends pas
(function() {
var a = $('#foo');
var Test = function(){
console.log(a); //outputs 'jQuery()'
var b = $('#foo');
console.log(b); //outputs 'jQuery(select#foo)' which is what I want
};
})();
Cette question provient de moi d'essayer de coller les sélecteurs fréquemment utilisés dans vars. A l'origine je le faisais dans chaque méthode (comme je l'ai fait avec var b
dans l'exemple ci-dessus) mais ensuite j'ai trouvé que je devais utiliser les sélecteurs dans plusieurs méthodes, donc j'ai déplacé l'affectation pour être disponible (ou je pensais) à tous les méthodes dans cette fonction anonyme. Comme vous pouvez le voir, cela ne fonctionne pas. Pourquoi est-ce?
EDIT: ce code est chargé par une méthode qui est déclenchée par un clic. L'id foo est présent au chargement de la page et n'est pas défini ou modifié dynamiquement.
Quand 'test' a appelé? –
Dans mon code actuel, il s'agit d'une fonction appelée dans le cadre d'une méthode de validation de données lorsqu'un formulaire est soumis. Après le chargement de la page à tout prix. – Stuart
Mais maintenant que j'y pense, la fonction anonyme elle-même ne se charge probablement pas au bon moment. Il est chargé par un plugin mais doit être chargé avant la fin de la page (donC# # foo n'est pas disponible). Ensuite, 'Test()' est appelé après le chargement de la page via un clic, donc naturellement cela fonctionne. Cela aide, merci! – Stuart