quinta-feira, 5 de novembro de 2009

Método toggle() do Jquery com problemas no IE8

Esses dias tive que usar algumas soluções em javascript, mais especificamente Jquery, pra atender a uma necessidade em nosso projeto.

Depois da página feita fui testar em outros navegadores (eu crio primeiro no Firefox) e uma funcionalidade simples, que é o método toggle() do Jquery (utilizado pra esconder / exibir um elemento), havia parado de funcionar somente no IE8, até no IE6 funcionava, mas no 8 não.

O mais estranho era que a versão anterior dessa página utilizava o toggle e ele funcionava no IE8, por que então parou de funcionar?

O problema.

Depois de analisar bem o código percebi que a única diferença era que eu tinha trocado o elemento em qual eu invocava o toggle. Antes era uma DIV e depois eu troquei para uma TR.

Foi então que eu descobri, através desse tópico aqui (http://stackoverflow.com/questions/975153/jquery-toggle-not-working-with-trs-in-ie) que o toggle do Jquery não funciona bem no IE8. Ele esconde a primeira vez, mas após isso ele não consegue mais exibir. No meu caso como já vinha escondido quando a página era carregada, ele nunca aparecia.

A solução.

Parece que o problema acontece devido a forma que o Jquery valida se o TR está escondido ou não, que retorna sempre true, falando que ele está visível.

Para solucionar o problema eu escrevi um método (ou função), que faz praticamente a mesma coisa que o toggle, só que verificando de outra forma, ficou assim (na verdade a ideia do método foi do Brian Bolton, naquele tópico que mencionei, eu apenas adaptei para funcionar com id's, que ficava melhor para o que eu precisava):



Utilizando essa função funcionou bem em todos os navegadores que testei.

Na verdade, se você habilitar a opção do IE8 de suporte a navegadores antigos funciona com o toggle simples, mas não podemos exigir que nossos clientes usem.

Enfim, mais uma vez isso só aumentou meu desejo de que o Internet Explorer sumisse de vez da internet, mas...

Espero que o post ajude quem estiver passando pelo mesmo problema.

Abraços.

1 comentários:

Alex Venceslau disse...

Valeu cara. Estava justamente com esse problema.