Resoluções de problemas no Internet Explorer

Ferramentas - Portfólio

Problema: #344 - Clica no link "Anexar arquivo" e não funciona.

  • Localização: Função FechaDivAvaliacoes() do arquivo /teleduc4/cursos/aplic/portfolio/ver.php
  • Solução: retirar o trecho de código:
    document.getElementById('divAvaliacaoEdit').class = "divHidden";
    e deixar apenas a linha:
    document.getElementById('divAvaliacaoEdit').className = "divHidden";
  • Comentários: Não se usa a função someElement.class = "someClassName". Se quiser mudar a classe de um elemento, usar a função someElement.className="someClassName"

Gerenciar Incrições

Problema: #345 - Não aparece o controle de paginação.

  • Localização: arquivo /teleduc4/cursos/aplic/administracao/gerenciamento.php
  • Solução:
    1. Foi alterado o esquema de criação da tabela dinâmica. Agora, criamos um <tbody>, colocamos o conteúdo nele(no caso é o tr_span) e por último colocamos o <tbody> na <table>(no caso tab). Alterado o código:
      tab.appendChild(tr_span);
      para
      var tbody=document.createElement('tbody');
      tbody.appendChild(tr_span);
      tab.appendChild(tbody);
    2. Alterado código:
      var cod_itens = document.getElementsByName('cod_usu[]');
      para
      var cod_itens = getElementsByName_iefix('input','cod_usu[]');
    3. Alterado código:
      var tab=document.getElementsByClassName('tabInterna');
      para
      var tab=document.getElementById('tbgeren');
  • Comentários:
    1. Quando se cria tabelas dinâmicas no HTML, não é inserido automaticamente a tag <tbody>. Essa tag <tbody> é necessária para aparecer o conteúdo da tabela no IE. A tabela está sendo gerada dinamicamente com document.createElement(tag) e inserindo o elemento com a tag criada usando tabela.appendChild(elementoCriado)
    2. A função getElementsByName(name) não funciona para todos os tipos de TAGs no IE. Foi criada uma função equivalente e que funciona para todas as TAGs: getElementsByName_iefix(tag, name)
    3. A função getElementsByClassName(class) não é suportada pelo IE. No código, não pegaremos pelo className e sim pelo Id.

Ferramentas - Material de Apoio

Problema: #346 - Quando clica no link "Totalmente Compartilhado", dá erro na página e não aparece o layer que deveria aparecer.

  • Localização: arquivo /teleduc4/cursos/aplic/material/ver.php
  • Solução: Alterar código:
    document.addEventListener('mousemove', TrataMouse, false);
    para:
    if (document.addEventListener) {    /* Caso do FireFox */
        document.addEventListener('mousemove', TrataMouse, false);
    } else if (document.attachEvent){    /* Caso do IE */
        document.attachEvent('onmousemove', TrataMouse);
    }\n");
    
  • Comentários: A função addEventListener não é suportada pelo IE. O equivalente seria attachEvent, mas não é suportada pelo Mozilla, então deve ser feita uma verificação antes para saber qual função deve ser usada.

Inscrever Formadores/Alunos (Administração Interna)

Problema: #348 - Erro de layout e paginação.

  • Localização: arquivo /teleduc4/cursos/aplic/administracao/inscrever3.php
  • Solução:
    1. Foi colocado " " quando a linha estiver vazia, pois o IE não mostra a borda da tabela com conteúdo vazio.
    2. Alterado código:
      td.setAttribute('colspan','5');
      para:
      td.setAttribute('colSpan','5');
    3. Alterado o esquema como a tabela é gerada e apagada. Quando criamos a <tr> para colocar os dados, setamos o id para 'user_#'. Assim não precisamos usar a função getElementsByName que não funciona para tag <tr> no IE.

Ferramentas - Avaliações

Problema: #349 - Página de "Avaliações Passadas", "Avaliações Futuras" e "Notas dos Participantes" com erro de JS. Botão de "Avaliar Participantes" e "Apagar" não funciona.

  • Localização: arquivos /avaliacoes/acoes.php, /avaliacoes/avaliacoes.inc, /avaliacoes/avaliacoes.php, /avaliacoes/avaliar_participantes.php, /avaliacoes/avaliar_participantes1.php, /avaliacoes/notas.php, /avaliacoes/ver.php
  • Solução:
    1. Alterado código
      <input type=hidden name=action value=criarAvaliacaoExt />\n");
      por
      <input type=hidden name=acao value=criarAvaliacaoExt />\n");
    2. Alterado código
      function CriarSpanSimples(frase,class)\n");
      por
      function CriarSpanSimples(frase,classe)\n");
    3. Alterado código
      <td width=\"20%\">".RetornaFraseDaLista($lista_frases,1)."</td>\n");
      por
      <td style=\"width:20%\">".RetornaFraseDaLista($lista_frases,1)."</td>\n");
  • Comentários:
    1. Não usar input com nome action, pois o IE não consegue distinguir se é o action do input, ou action do form. Melhor é usar nome em português, acao.
    2. Não colocar nome em varáveis que jé é do javascript. No caso, foi usado variável de nome class. No FireFox não tem problema, mas no IE ele não interpreta como variável, dando erro.
    3. O atributo width para <td> está deprecated. Usar atributo style e mudar a width.

Ferramentas - Exercício

Problema: #353 - Vários erros de JS que impossibilitava a funcionalidade de botões e continuidade no fluxo.

  • Localização: arquivo corrigir_exercicio.php, editar_exercício.php, editar_questao.php, exercicios.php, exercicios.php, questoes.php, resolver.php, ver_exercicios.php, ver_gabarito.php, tablednd.js
  • Solução:
    1. Alterado código
      document.body.scrollTop;
      por
      document.documentElement.scrollTop;
    2. Alterado código
      span.setAttribute("class", "link");
      por
      span.className="link";
    3. Foi tirado o evento onClick na tag <option>
    4. Alterado código
      Ypos = (isMinNS4) ? ev.pageY : ev.clientY;
      por
      Ypos = (isMinNS4) ? ev.pageY : event.clientY;
  • Comentários:
    1. O evento onClick não funciona na tag <option>. O correto é colocar o evento onChange na tag <select> e quando for selecionada uma das opções, gerenciar qual função deverá ser chamada.