Javascript Div Alert

Olá pessoal, alguém me pode ajudar neste pequeno problema?

Tenho uma tabela com N linhas onde criei a possibilidade de ocultar as colunas que quisermos.

Quando se pede para ocultar uma coluna da tabela já com muitos registos, há um tempo em que o browser parece estar bloqueado (o JS percorre todas as linhas uma por uma e vai ocultando as células que contêm o id inerente ao nome da coluna).

Para tentar atenuar esse problema, criei um pequeno div com o texto 'Por favor aguarde...' que supostamente seria mostrado ao iniciar a funcao ShowHideColumn() e ocultado ao terminar.

O problema é que ao clicar no link para ocultar a coluna, ele fica parado à mesma e só no final é que mostra o resultado, tudo de uma vez. (Mostra div aguarde, oculta coluna, oculta div aguarde)


Como é que posso fazer para mostrar o div e só depois é que executo o código?
Já tentei mostrar o Aguarde fora da função mas tem o mesmo problema.
Se colocar um alerta após mostrar o Aguarde, este é mostrado, aparece o alerta, e só depois é que oculta a coluna.

Se me pudessem ajudar com este problema agradecia imenso..
Se por outro lado me puderem dar uma dica sobre como ocultar a coluna toda de uma vez ainda seria melhor.

Abraço!!
 
Heyas all...

Esse é o maior problema com JS, a velocidade de execução, se estás a testar em FF experimenta em IE, até te assustas (bloqueia durante muito mais tempo em IE).

Em relação à solução para o problema, tenta optimizar o código o máximo possível, experimenta arranjar um contador em vez de percorreres as linhas todas da tabela..

Experimenta também, no ciclo for onde percorres as linhas, for ( i = 0; i < tabela.rows.length; i++ ), usar for ( i =0 ; i < linhas; i++ ) e declaras a var linhas antes... assim escusas de estar sempre a calcular o tamanho da tabela em cada iteração...

Pequenas optimizações em vários sítios ajudam sempre, podes poupar uns milésimos de segundo que são valiosos.

Para a mensagem aparecer antes de ele bloquear (tb tive de fazer isso), fazes o seguinte, quando fores chamar a função ShowHideColumn() usa o setTimeout, ficaria algo do género:
Código:
setTimeout("ShowHideColumn()",1000);

Ou seja passado 1 segundo, ele corre a função ShowHideColumn(), tens de brincar um pouco com o tempo (pelos menos eu tive) para isso ficar fino, tive alguns problemas com isso...

Podes ver a explicação da setTimeout() aqui ( w3schools sempre a bombar )

Claro que a melhor solução era não bloquear, mas infelizmente à situações onde isso é impossivél, e tem que se usar mesmo JS.

Espero ter ajudado...

Hasta all [[]]
 
Última edição:
Thanks Lancaster, problema resolvido ;)

Código:
function showhideColumn(idcoluna1)
 {
    show('showwaithide');
    setTimeout("showhideColumn2('"+idcoluna1+"')", 0);
 }
Perdi mais tempo a tentar meter aquele parametro a funcionar.. faltava colocar as plicas.. estava a terminar a string, colocar a var e continuar a string, mas antes de terminar e continuar devia ter posto as plicas...
Coisa tão simples que me fez perder uma manhã :S

Thanks pela ajuda :D
 
O teu problema está relacionado com as próprias características do javascript, nomeadamente é síncrono a executar o código. Corre primeira uma função, depois outra, etc. A forma de contornar esse problema é através de chamadas a funções de forma assíncrona, usando timers por exemplo.
 
Boas...

Thanks Lancaster, problema resolvido ;)

Código:
function showhideColumn(idcoluna1)
 {
    show('showwaithide');
    setTimeout("showhideColumn2('"+idcoluna1+"')", 0);
 }
Perdi mais tempo a tentar meter aquele parametro a funcionar.. faltava colocar as plicas.. estava a terminar a string, colocar a var e continuar a string, mas antes de terminar e continuar devia ter posto as plicas...
Coisa tão simples que me fez perder uma manhã :S

Thanks pela ajuda :D

De vez em quando também atrofio imenso com plicas/aspas...mas ainda bem que ficou a trabalhar...

O teu problema está relacionado com as próprias características do javascript, nomeadamente é síncrono a executar o código. Corre primeira uma função, depois outra, etc. A forma de contornar esse problema é através de chamadas a funções de forma assíncrona, usando timers por exemplo.

jaac, queres iluminar um pouco os não iluminados? Com um exemplo/link /whatever? É que sinceramente não estou a ver como implementar ( o exemplo dele por exemplo ) dessa maneira, a não ser que fosse chamar uma função que de 1s em 1s escondia 10/15 linhas por exemplo...

É algo deste género?

Hasta all [[]]
 
Back
Topo