1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Javascript Div Alert

Discussão em 'Web Development' iniciada por Ricardo Santos, 18 de Outubro de 2006. (Respostas: 4; Visualizações: 2036)

  1. 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!!
     
  2. Lancaster

    Lancaster To fold or to FOLD?

    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: 18 de Outubro de 2006
  3. 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
     
  4. jaac

    jaac Power Member

    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.
     
  5. Lancaster

    Lancaster To fold or to FOLD?

    Boas...

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

    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 [[]]
     

Partilhar esta Página