Javascript: script precisa esperar por um elemento de carga
-
05-07-2019 - |
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
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 ...