Sem dúvida, uma das funções mais usadas do JavaScript (se não for A mais usada) é o document.getElementById(). O que nem todos sabem é de um pequeno problema sobre a implementação desta função no Internet Explorer.

Bem, segundo o que o próprio nome da função diz, ela é uma função para “pegar um elemento pelo id”; contudo, no IE, esta função também pega um elemento pelo name.Veja o exemplo.

Imagine o seguinte código:
<input name="teste" type="text" value="oops">
<script type="text/javascript">
var a = document.getElementById('teste');
try{
alert(a.value);
}
catch(e){
alert('"teste" não existe!');
}
</script>

O que se espera é que ‘”teste” não existe’ seja alertado, pois não há elemento com id igual a “teste”, logo “a” seria nulo. Isso ocorre no Firefox, por exemplo. Já no IE o valor “oops” é alertado, pois ele pega o elemento pelo name, e não pelo id.

Duvida? Faça o teste com o código acima.
Podemos dizer então que o IE está errado em sua implementação? Não necessariamente.

Do ponto de vista do nome da função, “getElementById”, os elementos deveriam ser pegos por e somente por id, e não por name. Contudo, o W3C define que id e name compartilham do mesmo namespace; segundo o consórcio, quando id e name são usados simultaneamente em uma mesma tag eles PRECISAM ter o mesmo valor. Além disso, é proibido usar um id igual a um name para elementos diferentes. Assim, a Microsoft não pode ser acusada de ter implementado incorretamente a função pois, no exemplo acima, se existisse algum elemento com id igual a “teste”, seria o mesmo input text, visto que o seu name já é “teste”, logo o id “teste” só poderia ser aplicado aquele elemento, semanticamente falando.

Mas ainda tem a questão de que o nome da função informa que o elemento será pego pelo id, e não pelo name… Afinal, quem tem a razão?

Minha resposta pessoal é: não sei. Mas tenho uma opinião pessoal.

Eu acho que se o nome da função informa que o elemento será pego por id, ele deve ser pego somente por este atributo, e não por name (ao contrário do que ocorre no IE). Pois, semanticamente falando, o atributo id pode existir ou não, independentemente da existência do atributo name, e vice-versa! O fato é que se há um atributo name definido e o atributo id não foi, então NÃO HÁ um elemento com o atributo id igual ao valor passado por parâmetro, logo, não se pode pegar o elemento por id.

Isso é o que eu acho. Mas quem deve decidir qual das implementações é correta é o W3C.

E você? Tem opinião formada sobre isso?

Fonte de inspiração: Quirksmode

Share/Save/Bookmark

Tags Tags: ,
Categories: Geral, Internet Explorer, JavaScript, Web
Posted By: Jerônimo Fagundes da Silva
Last Edit: 13 Aug 2008 @ 11 24 AM

E-mailPermalinkComments (1)

Já como primeiro post, vou dar minha opinião pessoal (e rápida, espero) sobre esse assunto que já está provocando “guerras” de opiniões pela Internet: afinal, o que é essa tal Web 2.0?

Esta semana, li o excelente post do Alex Hubner no Webinsider falando o que pensa sobre o termo (recomendo fortemente que leia); em um resumo - em minhas próprias palavras :-P - ele dá sua opinião de que não há motivo para o alvoroço vindo da disseminação da “Web 2.0″, pois ela não acrescenta NADA tecnologicamente: ela é nada mais, nada menos, do que a velha web (1.0, se quiser chamar assim); ele comenta ainda que boa parte da tão famosa “participação ativa do usuário” no conteúdo dos sites não passa de um amontoado de lixo.

Eu concordo. Com quase tudo.

Minha opinião vai ao encontro da idéia dele: não há nada novo na tecnologia. As tecnologias utilizadas já existem há tempo. XmlHttpRequest já vem de longa data (ok, não tão longa, mas já tem uma boa história…). Javascript, CSS, XML, JSON, etc. Tudo é conhecido há tempo.

CONTUDO, em minha opinião, o que está se fundamentando hoje (isso sim pode se chamar de novo) é a consciência do desenvolvedor web a respeito de tais tecnologias. Atualmente, mais desenvolvedores se preocupam em aprender os padrões web e a construir suas páginas/sistemas web seguindo-os, o que sem dúvida é “um grande passo rumo a uma Internet melhor” (uma pitada de utopia não mata ninguém). Hoje, utilizamos mais essas tecnologias, e as utilizamos melhor; isso certamente provoca o que vemos hoje: interfaces mais ricas visualmente, mais fáceis de usar, com mais recursos, que funcionam melhor entre os diversos navegadores existentes, etc.

A utilização em massa do AJAX, por exemplo, traz ao usuário final uma grande vantagem: a sensação de ter uma resposta imediata a uma ação sua, mesmo que seja um “Loading”, ou “Please wait while…”; afinal, podemos utilizar as requisições assíncronas como uma grande ferramenta para esconder a “triste realidade”: a web continua a mesma. Ainda temos latência na rede, falhas de HTTP, quedas de servidor, etc. Todavia, a lógica não é complicada (agora venho eu com equações):

Não há resposta imediata = Usuário triste :-(

Ainda com latência, mas mostrando um belo “Loading” = Usuário feliz :-)

Exemplo? Compare os sistemas de webmail antigos com os novos. Alguém prefere as velhas interfaces, que se recarregavam a cada interação? Ou a maioria dos usuários preferem a nova interface, com respostas imediatas, assim como podemos ver no YAHOO! Mail ou GMail, por exemplo? Eu, particularmente, prefiro o meu YAHOO! Mail com interface AJAX. :-)

O por quê de minha insistência em destacar e priorizar a felicidade do usuário, ainda que seja conquistada com um “disfarce” para a velha Web 1.0? Simples. Porque acho que este é o trabalho de todos nós, desenvolvedores web: conquistar o usuário, e mantê-lo utilizando o serviço desenvolvido.

Já quanto ao amontoado de lixo na Internet, decorrente da participação ativa do usuário, concordo plenamente. Não é difícil perceber quanta coisa inútil tem por aí (espero que não incluam este post nessa lista…). Vide os “vídeos-lixo” no YouTube que, por causa de uma grande audiência, acabam atrapalhando buscas de conteúdo sério; ou ainda, a destruição do idioma, com a geração MiGuXoS (me deu trabalho pra escrever isso!). Contudo, não há solução pra isso. É público, caiu nos braços do povo. Quando não tinha essa interação toda, as pessoas se contentavam repassando para todos os seus contatos e-mails advertindo sobre os terríveis males do monóxido de dihidrogênio (spam é coisa que tem cada vez mais). Agora,  outras formas de interação também são utilizadas para diversos propósitos, mesmo que estapafúrdios como esse de “banir a água”. Basta-nos tentar ignorar o amontoado de bobagens.

Para encerrar minha opinião, digo que concordo plenamente com o comentário da Valéria, no post do Alex Hubner. Dane-se o novo jargão. O que importa é que estamos aprendendo melhor a tecnologia. Fazemos mais, e melhor. A “Web 2.0″ veio pra nos tornar desenvolvedores melhores, mesmo sabendo o que é fato:

A Web 2.0 não existe.

Share/Save/Bookmark

Tags Tags: , , , , ,
Categories: Geral, JavaScript, Web
Posted By: Jerônimo Fagundes da Silva
Last Edit: 24 Sep 2008 @ 02 33 PM

E-mailPermalinkComments (0)
\/ More Options ...
Change Theme...
  • Users » 1
  • Posts/Pages » 19
  • Comments » 15
Change Theme...
  • VoidVoid
  • LifeLife « Default
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LiteLight
  • No Child Pages.