Posts Tagged ‘Web’

Problema com InnerHtml no calendário do RSform

Buenas, buenas, buenas…

Hoje pela manhã efetuei uma consultoria técnica junto a empresa e-sause, onde Cláudia Cristina Marconato encontrou um problema no componente RSform, sendo este um dos vários disponívels para  o Joomla. Este componente é, basicamente, utilizado para criar formulários permitindo, em uma de suas funções, colocar um belo calendário. O problema reportado foi que não estava funcionando no IE 7 e IE 8, apenas no nosso amigo Firefox. Problema clássico para desenvolvedores web.

No Internet Explorer, basicamente, dava um erro de JavaScript (arquivo calendar.js) na linha 2 384 no seguinte comando:

     // o html é criado anteriormente montando toda a tabela</p>
     this.oDomContainer.innerHTML = html.join("\n");</p>

Se comenta-se o belo comando, não ocorria mais erro de JavaScript porém, entretanto, não funcionava o calendário (óbvio).

Pesquisando, pôde ser visto que, a propriedade InnerHtml possui algumas limitações quanto ao IE e não funciona muito bem com tabelas. O arquivo JS gerava todo o calendário com tabelas e agora o circo estava montado.

Tentamos substituir as tags <table> por <div>. Para a nossa surpresa, não deu erro de JavaScript e o calendário apareceu. Porém também não funcionou, pois estava cheio de <tr> e <td>. O complicado é que o plugin é de terceiro, sendo ruim alterar. Mas neste caso não tivemos opções.

Conheço muito pouco de Joomla, antes que alguêm comece a fazer perguntas dele e seus componentes, porém entendo um pouco de JavaScript e Dom o que ajudou na solução deste problema.

A resposta é simples. A propriedade InnerHtml é somente leitura no IE para <tables> e <tr> e como estava tentando adicionar um conteúdo nele ocorreu o erro.

Como o InnerHtml não podia ser utilizado diretamente no oDomContainer no IE e não queriamos alterar tudo para div, o que resultaria em um novo componente, a solução foi simples: criar uma div dinâmica e colocar o conteúdo do html (tables e tudo mais) dentro dela, visto que a propriedade InnerHtml não é somente leitura para divs no IE.  Substituindo, assim, a linha anterior por estas novas:

   var fatherControl = document.createElement(&quot;div&quot;);
   fatherControl.innerHTML = html.join(&quot;\n&quot;);
   this.oDomContainer.appendChild(fatherControl);

Com isto o problema estava solucionado em poucos minutos, funcionando no IE e Firefox.

Caso alguêm tenha problema com este componente ou, mais genéricamente, falando com InnerHtml e tabelas pode usar a solução acima sem precisar alterar todo seu script ou lógica atual.

Abrs

“Paciência e perseverança têm um efeito mágico: diante delas as dificuldades e os obstáculos desaparecem”. John Quincy Adams

 

Desenvolvedor de software, amante pela tecnologia, empreendedor, eclético em sistemas operacionais, analista de sistemas, entusiasta em inteligência artificial, absurdamente ocupado, arquiteto de software , está sempre envolvido em projetos, consultor , adora ir em eventos de tecnologia e empreendedorismo. Desenvolve para PC e Web. Iniciou uma nova jornada de desenvolvimento e estudos em Android e IOS.
Calendário
May 2012
M T W T F S S
« Nov    
 123456
78910111213
14151617181920
21222324252627
28293031  
Nuvem de tags
Total de visitas até ontem
@lorivalsc

Posting tweet...

Powered by Twitter Tools

Biblioteca
Shelfari: Book reviews on your book blog