Escrevi uma funcção em javascript que lê o conteúdo de um form, localiza os campos do tipo checkbox que estão marcados e para cada um deles chama uma outra função Ajax, que por sua vez passa parâmetros para uma aplicação em PHP que grava resultados no banco de dados. Todo esse processo funciona perfeitamente, com exceção de uma barra de progresso, que no IE não funciona adequadamente, essa barra é um DIV que inicialmente está oculto e quando a função começa a correr no formulário faz uma conta de percentual e atualiza o DIV. No Firefox, funciona perfeitamente, no IE não consigo, é alguma coisa relacionada com o tempo de execução ou uma falta de algum tipo de Flush(), pois para o div aparecer, tive que colocar em uma outra função que dá um tempo de 300 milissegundos para chamar a principal, mas durante o loop, o DIV não mostra na tela as atualizações de jeito nenhum, embora ele receba todas e processe corretamente. Coloquei um Alert() antes da chamada Ajax e então o percentual aumentou, é como se o sistema “parasse para respirar” e atualizada o DIV. Tentei todo o tipo de gambiarra possível para tentar forçar um flush de tela, mas nada deu certo. Alguém já passou por isso e conseguiu uma maneira de resolver?
Exemplo do algorítimo:
Função Inicial {
Mostra o DIV,
chama proxima função após 300 ms
}
Função PróximaFunção {
Obtem o número total de elementos do FORM
Loop de 0 até elementos-1 { // No IE este loop é dominante e não deixa saidas de tela no DIV
prepara os parâmetros;
calcula o percentual completo;
chama função AJAX; // se eu coloco um Alert() aqui, o DIV é atualizado na tela
atualiza o percentual no DIV
}
Esconde o DIV e resseta seu innerHTML;
Fim;
}
O objetivo é atingido plenamente tanto no IE quanto no FF, apenas no IE que o usuário não sabe o que está acontecendo, pois o DIV de status não é atualizado. Inclusive coloquei um GIF animado no lugar e ele não mexe no IE, fica estático.
Preciso de um comando mágico ou qualquer outra técnica que force a atualização do DIV que está mostrando na tela.
Obrigado.