Pergunta

Informação anterior:
Eu tenho uma função que, quando chamada cria lista de seleção dentro de um formulário e preenche-o. Depois que o script é executado através das opções na lista e procura por um determinado valor. Se o valor está lá, o script 'seleciona' essa opção.
Problema:
Como a lista é criada de forma dinâmica e é algumas vezes muito grande, ele leva um tempo para carga. Quando isso acontece, a segunda parte do script (a parte que Selecciona uma opção), não fazer nada, porque a lista de seleção não teve tempo de carga.
Ideia para uma solução:
O que seria bom é chamar a segunda parte da função (como uma função separada) em um evento de carregamento para a lista de seleção. Mas listas de seleção não é suposto ter um atributo onload. A outra idéia é simplesmente adicionar um atraso, mas um dia o atraso pode não ser suficiente.
Agradecemos antecipadamente por qualquer ajuda

Foi útil?

Solução 4

Ok, eu finalmente corrigiu o problema. A solução foi completamente diferente do que o que foi discutido aqui. Basicamente, eu estava usando 'nova opção (valor, texto)' para adicionar opções à minha lista. I acabou jogando em uma declaração se e quando um valor igual o que eu precisava é usada nova opção (valor, texto, true). e que resolveu o problema. Tudo em um dia de trabalho.

Outras dicas

Usando um atraso não é confiável. Tudo o que você está usando para preencher a lista de seleção deve chamar a função diretamente quando ele for concluído.

alternadamente:

Uma vez que não existe um "onload" evento para a seleccionar tudo o que você pode realmente fazê-lo tem uma função que chama a si mesmo depois de um tempo limite. Se o comprimento dos itens da lista de seleção foi alterado de zero, você sabe algo está adicionando itens (o ponto de partida). Se o ponto de início foi atingido e nada mudou após o próximo tempo limite, você pode assumir itens deixaram de ser adicionado à lista, assim você pode em seguida, executar a segunda função.

Como você está fazendo a sua chamada AJAX? A maioria das bibliotecas AJAX irá fornecer o mecanismo para fazer uma chamada de retorno na conclusão bem sucedida. Por exemplo, em jQuery:

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

Se você está lidando com a resposta ajax manualmente e construir sua lista em javascript, então você já tem o código que sabe quando a lista estiver concluída, assim você pode simplesmente fazer a parte de seleção, uma vez que tenha terminado e não como um função separada (como como zyeming sugeriu).

Se isso não ajudar, pode valer a pena postar algum código para que as pessoas podem dar-lhe uma resposta mais específica.

Por que você não fazer a função que seleciona opção uma função de chamada de retorno. Vai ser chamada no final da função que cria a lista. Por exemplo.

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

Nota: não pode ser assim, mas eu acho que você tem a idéia ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top