Question

Informations générales:
J'ai une fonction qui, lorsqu'elle est appelée, crée une liste de sélection à l'intérieur d'un formulaire et la remplit. Après cela, le script parcourt les options de la liste et recherche une certaine valeur. Si la valeur est présente, le script "sélectionne" cette option.

Problème:
Étant donné que la liste est créée dynamiquement et est parfois très longue, le chargement prend un certain temps. Lorsque cela se produit, la deuxième partie du script (la partie qui sélectionne une option) ne fait rien car la liste de sélection n'a pas eu le temps de se charger.

Idée de solution:
Ce qui serait bien est d’appeler la deuxième partie de la fonction (en tant que fonction séparée) dans un événement onload pour la liste de sélection. Mais les listes de sélection ne sont pas supposées avoir un attribut onload. L’autre idée est d’ajouter simplement un délai, mais un jour, le délai peut ne pas être assez long.

Merci d'avance pour votre aide

Était-ce utile?

La solution 4

Ok, j'ai finalement résolu le problème. La solution était complètement différente de celle discutée ici. Fondamentalement, j'utilisais 'nouvelle option (valeur, texte)' pour ajouter des options à ma liste. J'ai fini par lancer une instruction if et lorsqu'une valeur égale à ce dont j'avais besoin est utilisée nouvelle Option (valeur, texte, vrai). et cela a résolu le problème. Tout dans la journée de travail.

Autres conseils

L'utilisation d'un délai n'est pas fiable. Tout ce que vous utilisez pour remplir la liste de sélection doit appeler la fonction directement lorsque celle-ci est terminée.

alternativement:

Puisqu'il n'y a pas de "onload" " événement pour le tout sélectionner vous pouvez vraiment le faire ont une fonction qui s’appelle après un délai d’attente. Si la longueur des éléments de la liste de sélection est passée de zéro, vous savez que quelque chose ajoute actuellement des éléments (le point de départ). Si le point de départ a été atteint et que rien n'a changé après le délai d'attente suivant, vous pouvez supposer que des éléments ont cessé d'être ajoutés à la liste et vous pouvez ensuite exécuter la deuxième fonction.

Comment faites-vous votre appel AJAX? La plupart des bibliothèques AJAX fourniront le mécanisme pour effectuer un rappel en cas de réussite. Par exemple, dans jQuery:

$("#myList").load("ajax.url", function(){
   //your content has been loaded, so you can do your selection logic here
});

Si vous gérez la réponse ajax manuellement, & amp; en construisant votre liste en javascript, vous avez déjà du code qui sait quand la liste est terminée, vous pouvez donc faire la sélection une fois terminée plutôt que comme une fonction séparée (comme l'a suggéré zyeming).

Si cela ne vous aide pas, il peut être intéressant de poster du code pour que les gens puissent vous donner une réponse plus précise.

Pourquoi ne faites-vous pas de la fonction qui sélectionne option une fonction de rappel. Il sera appelé à la fin de la fonction qui crée la liste. Ex.

function createList(onComplete) {
// Create the list and maybe other tasks
onComplete();
}

Note: ce n'est peut-être pas comme ça mais je pense que vous avez l'idée ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top