2010-04-27 4 views
1

je le code du bloc de code suivant lorsque le document est prêt:

$(document).ready(function() { 
    createDivs(); // creates some divs with class 'foo'; 

    // iterate 
    $(".foo").each(function(index) { 
     alert(index + " - " + $(this).text()); 
    }); 
} 

Je trouve que la partie « itérer » manque le divs je créé en la méthode createDivs() entièrement! Y a-t-il un problème de synchronisation que je ne connais pas? Pourquoi jquery ne voit-il pas les divs qui viennent d'être créés?

+0

Êtes-vous sûr createDivs crée avec succès les divs et les ajoute au DOM? – justkt

+7

Vous devrez écrire le code dans 'createDivs()'. –

+0

@justkt - J'ouvre la page avec Firebug et je vois que les divs sont créées correctement. – ripper234

Répondre

0

J'ai trouvé que Javascript est comme un taureau dans un coureur de F1 quand il s'agit d'exécuter du code. Il n'y a pas de délai d'attente pour exécuter du code dans une chaîne particulière.

Vous devriez probablement créer une situation où createDivs() est capable de déclencher tout code dépendant après qu'il est terminé face à un rappel. Sans voir le code createDivs, il est difficile de vous donner un moyen de l'implémenter.

MISE À JOUR

applique vraiment que si vous faites un appel asynchrone (selon mes amis ci-dessous).

+3

Pour autant que je sache, si vous ne faites pas de travail asynchrone, Javascript devrait exécuter le code de manière séquentielle. Bien sûr, si createDivs s'éteint et appelle quelque chose sur le serveur et crée réellement les divs dans le rappel de succès ou quelque chose du genre, alors tout est dans l'air. – justkt

+0

Si vous avez déjà essayé de faire ceci: '$ ('. Somediv'). SlideUp(); $ ('. Somediv'). Remove();', vous connaissez la séquence de code de JS. Je ne sais pas si cela correspond à votre définition de l'asynchronie, mais cela m'a surpris quand je l'ai vu pour la première fois. – dclowd9901

+2

Asynchrone, les animations sont effectuées sur des intervalles. –

0

La synchronisation n'est pas le problème. Peut-être que createDivs() n'ajoute pas les éléments au DOM?

+0

Cette réponse est plus appropriée en tant que commentaire à la question. –

1

Dans mon expérience de manipulation DOM peut agir asynchrone parfois, peut-être grâce à l'optimisation par le navigateur, ma solution habituelle est d'avoir createDivs() retourner les divs créés utilisent alors les éléments retournés aswell

var divs = createDivs(); 
$('.foo').and(divs).each(function(){ 
    //happy fun time 
}) 
Questions connexes