Domanda

Informazioni sullo sfondo:
Ho una funzione che quando viene chiamata crea un elenco di selezione all'interno di un modulo e lo popola. Successivamente, lo script esegue le opzioni nell'elenco e cerca un determinato valore. Se il valore è presente, lo script "seleziona" tale opzione.
Problema:
Poiché l'elenco viene creato in modo dinamico ed è talvolta molto grande, il caricamento richiede del tempo. Quando ciò accade, la seconda parte dello script (la parte che seleziona un'opzione), non fa nulla perché l'elenco di selezione non ha avuto il tempo di caricare.
Idea per una soluzione:
Quello che sarebbe bello è chiamare la seconda parte della funzione (come una funzione separata) in un evento onload per la lista selezionata. Ma gli elenchi selezionati non devono avere un attributo onload. L'altra idea è semplicemente aggiungere un ritardo, ma un giorno il ritardo potrebbe non essere abbastanza lungo.
Grazie in anticipo per qualsiasi aiuto

È stato utile?

Soluzione 4

Ok, ho finalmente risolto il problema. La soluzione era completamente diversa da quella discussa qui. Fondamentalmente, stavo usando 'nuova opzione (valore, testo)' per aggiungere opzioni al mio elenco. Ho finito per lanciare un'istruzione if e quando un valore uguale a quello di cui avevo bisogno viene utilizzato nuova opzione (valore, testo, vero). e questo ha risolto il problema. Tutto in una giornata di lavoro.

Altri suggerimenti

L'uso di un ritardo non è affidabile. Qualunque cosa tu stia usando per popolare l'elenco di selezione dovrebbe chiamare la funzione direttamente al termine.

alternativamente:

Poiché non è presente "onload" evento per il selezionare tutto quello che puoi veramente fare ha una funzione che si chiama dopo un timeout. Se la lunghezza degli elementi nell'elenco di selezione è cambiata da zero, sai che al momento qualcosa sta aggiungendo elementi (il punto iniziale). Se il punto iniziale è stato raggiunto e non è cambiato nulla dopo il timeout successivo, è possibile presumere che gli elementi abbiano smesso di essere aggiunti all'elenco, quindi è possibile eseguire la seconda funzione.

Come stai facendo la tua chiamata AJAX? La maggior parte delle librerie AJAX fornirà il meccanismo per eseguire una richiamata al completamento con esito positivo. Ad esempio in jQuery:

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

Se stai gestendo la risposta ajax manualmente & amp; costruendo la tua lista in javascript, allora hai già un codice che sa quando la lista è finita, quindi puoi semplicemente fare la parte di selezione una volta che è finita piuttosto che come una funzione separata (come ha suggerito zyeming).

Se questo non ti aiuta, potrebbe valere la pena pubblicare un po 'di codice in modo che le persone possano darti una risposta più specifica.

Perché non si rende la funzione che seleziona l'opzione una funzione di richiamata. Verrà chiamato alla fine della funzione che crea l'elenco. Per es.

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

Nota: potrebbe non essere così ma penso che tu abbia avuto l'idea ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top