<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://clientside.com.br/wp-atom.php">
	<title type="text">Client-side</title>
	<subtitle type="text">aplicações Ajax, Javascript, Tableless, CSS, XHTML, artigos e tutoriais</subtitle>

	<updated>2009-10-12T22:37:35Z</updated>
	<generator uri="http://wordpress.org/" version="2.3.1">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://clientside.com.br" />
	<id>http://clientside.com.br/feed/atom/</id>
	

			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/client-side" /><feedburner:info uri="client-side" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>elcio</name>
						<uri>http://blog.elcio.com.br</uri>
					</author>
		<title type="html"><![CDATA[Chamando a atenção na barra de tarefas]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/w0saOqB1CCY/" />
		<id>http://clientside.com.br/chamando-a-atencao-na-barra-de-tarefas/</id>
		<updated>2009-10-12T22:37:35Z</updated>
		<published>2009-10-12T22:37:35Z</published>
		<category scheme="http://clientside.com.br" term="Básico" /><category scheme="http://clientside.com.br" term="Javascript" />		<summary type="html"><![CDATA[Um aluno está desenvolvendo um chat e me perguntou esses dias como fazer para alertar o usuário da chegada de uma nova mensagem quando a janela do bate-papo estiver em segundo plano. &#8220;Como o MSN&#8221;, ele disse. Bom, você não faz isso. Se alguém conhecer um truque secreto, por favor nos conte.
O que você pode [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/chamando-a-atencao-na-barra-de-tarefas/">&lt;p&gt;Um aluno está desenvolvendo um chat e me perguntou esses dias como fazer para alertar o usuário da chegada de uma nova mensagem quando a janela do bate-papo estiver em segundo plano. &amp;#8220;Como o MSN&amp;#8221;, ele disse. Bom, você não faz isso. Se alguém conhecer um truque secreto, por favor nos conte.&lt;/p&gt;
&lt;p&gt;O que você pode fazer é mudar o texto do título da janela afim de chamar atenção do usuário. Não é a mesma coisa, mas é o melhor que temos.&lt;/p&gt;
&lt;p&gt;Preparei então um pequeno código de exemplo. Arquivo titleRotator.js:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="javascript"&gt;titleRotator=&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  chars:&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;'#'&lt;/span&gt;,&lt;span style="color: #3366CC;"&gt;' '&lt;/span&gt;,&lt;span style="color: #3366CC;"&gt;'%'&lt;/span&gt;,&lt;span style="color: #3366CC;"&gt;' '&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;,
  rotating:&lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;,
  position:&lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;,
  rotate:&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;rotating&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;position&lt;/span&gt;=&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;position&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;+1&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;%&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;chars&lt;/span&gt;.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;clear&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
      document.&lt;span style="color: #006600;"&gt;title&lt;/span&gt;=&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;chars&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;position&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;+&lt;span style="color: #3366CC;"&gt;' '&lt;/span&gt;+document.&lt;span style="color: #006600;"&gt;title&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;,
  clear:&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    document.&lt;span style="color: #006600;"&gt;title&lt;/span&gt;=document.&lt;span style="color: #006600;"&gt;title&lt;/span&gt;.&lt;span style="color: #006600;"&gt;replace&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0066FF;"&gt;/^\W /&lt;/span&gt;,&lt;span style="color: #3366CC;"&gt;''&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;,
  start:&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;!&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;rotating&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      document.&lt;span style="color: #006600;"&gt;title&lt;/span&gt;=&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;chars&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;position&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;+&lt;span style="color: #3366CC;"&gt;' '&lt;/span&gt;+document.&lt;span style="color: #006600;"&gt;title&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;rotating&lt;/span&gt;=&lt;span style="color: #003366; font-weight: bold;"&gt;true&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;,
  &lt;span style="color: #000066;"&gt;stop&lt;/span&gt;:&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;rotating&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;clear&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;rotating&lt;/span&gt;=&lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;,
  toggle:&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;rotating&lt;/span&gt;?&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #000066;"&gt;stop&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;:&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;start&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
setInterval&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;titleRotator.rotate()&amp;quot;&lt;/span&gt;,&lt;span style="color: #CC0000;"&gt;150&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Você pode ver um exemplo disso funcionando &lt;a href="http://blog.elcio.com.br/files/atencao/atencao.html"&gt;aqui&lt;/a&gt;. Sugestões de melhoria são muito bem-vindas.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/okvnMO1XsZ4DhleqTxs3Hleduis/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/okvnMO1XsZ4DhleqTxs3Hleduis/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/okvnMO1XsZ4DhleqTxs3Hleduis/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/okvnMO1XsZ4DhleqTxs3Hleduis/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/chamando-a-atencao-na-barra-de-tarefas/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Eduardo Ottaviani</name>
						<uri>http://javiani.wordpress.com</uri>
					</author>
		<title type="html"><![CDATA[Menos é mais, quanto mais simples melhor]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/7YndB3f_HO4/" />
		<id>http://clientside.com.br/menos-e-mais-quanto-mais-simples-melhor/</id>
		<updated>2009-06-23T19:27:00Z</updated>
		<published>2009-06-23T19:27:00Z</published>
		<category scheme="http://clientside.com.br" term="Boas práticas" /><category scheme="http://clientside.com.br" term="Básico" /><category scheme="http://clientside.com.br" term="Javascript" />		<summary type="html"><![CDATA[É, este é um dos tópicos do manifesto deste site.
Eu queria na verdade falar sobre 3 deles, mas este tópico tem o foco principal neste post. Parece uma frase simples, mas no desenvolvimento esta frase poderia evitar muitos e muitos problemas.
Numa conversa com um colega de trabalho meu da Agência, o Danilo,  percebi que [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/menos-e-mais-quanto-mais-simples-melhor/">&lt;p&gt;É, este é um dos tópicos do manifesto deste site.&lt;/p&gt;
&lt;p&gt;Eu queria na verdade falar sobre 3 deles, mas este tópico tem o foco principal neste post. Parece uma frase simples, mas no desenvolvimento esta frase poderia evitar muitos e muitos problemas.&lt;/p&gt;
&lt;p&gt;Numa conversa com um colega de trabalho meu da Agência, o &lt;a href="http://www.tidbits.com.br" title="Danilo Martins - Blog Tidbits"&gt;Danilo&lt;/a&gt;,  percebi que MUITOS plugins existentes para jQuery tem quase o mesmo tamanho ou é maior que a própria biblioteca!!!Na maioria das vezes desnecessariamente.&lt;/p&gt;
&lt;p&gt;Isto porque na tentativa de facilitar o uso do código e pensar (ou tentar pensar) em todas as ocasiões possíveis, o desenvolvedor acaba codificando MUITO MAIS do que deveria.&lt;/p&gt;
&lt;p&gt;Eu precisei fazer um esquema para fazer upload de múltiplos arquivos e utilizei um plugin para fazê-lo. Acabei precisando fazer uma gambiarra para fazer funcionar, porque não existia uma opção no plugin para o propósito.&lt;/p&gt;
&lt;p&gt;Quando fui abrir o código-fonte para tentar estender o plugin,  me deparei com um monstro de tantos KB. Fazia de tudo, abria modal, dava piruetas etc.&lt;/p&gt;
&lt;p&gt;Trocentas linhas de código para fazer uma coisinha simples: mandar múltiplos arquivos ao submeter o formulário.Eu usei apenas um dos quinhentos métodos daquele plugin, imagina o que foi baixado para a página só para aquele funcionamento mais o jQuery!.&lt;/p&gt;
&lt;p&gt;Mais tarde acabei fazendo uma versão minha deste código, apenas usando Javascript, e ainda assim ficou MUITO menor que a versão que utilizava jQuery&amp;#8230;absurdo.&lt;/p&gt;
&lt;p&gt;Pensando nisso, resolvi fazer uma implementação simples, rápida e estensível de um script antigo que o Elcio fez de máscaras, &lt;a href="http://elcio.com.br/ajax/mascara/" title="Mascaras elcio.com.br/ajax/mascara"&gt;este aqui&lt;/a&gt;, e mostrar a minha forma, de usar os tópicos 2, 4 e 5 do manifesto do ClientSide, para resolver um problema simples, de forma simples, reaproveitando o código e usando um pouco de orientação a objetos em Javascript.&lt;/p&gt;
&lt;p&gt;Pensei então em um objeto do tipo JSM, guardando algumas variáveis, sendo uma delas (JSM.add) para estender o objeto com novas máscaras, a outra (JSM.methods) para armazenar todos os métodos de mascaramento existentes no objeto e a outra uma pseudo-classe.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;  &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;
    JSM &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;form&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;new&lt;/span&gt; JSM.&lt;span style="color: #003366; font-weight: bold;"&gt;Class&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;form&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;  
&amp;nbsp;
    JSM . &lt;span style="color: #006600;"&gt;add&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;json&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      JSM.&lt;span style="color: #006600;"&gt;methods&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;json.&lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = json.&lt;span style="color: #006600;"&gt;method&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    JSM . &lt;span style="color: #006600;"&gt;methods&lt;/span&gt; = &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;JSM é uma função, mas é uma função que tem atrelada a ela outras variaveis, e retorna uma instância de uma &amp;#8220;classe&amp;#8221;, a JSM.Class, passando como parâmetro a string contendo o name do formulário.&lt;br /&gt;
A pseudo-classe:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;  JSM . &lt;span style="color: #003366; font-weight: bold;"&gt;Class&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;form&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #009900; font-style: italic;"&gt;//Private:&lt;/span&gt;
    &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; form = document&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;form&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
    &lt;span style="color: #009900; font-style: italic;"&gt;//Public:&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;inputs&lt;/span&gt; = &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;form&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; form&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;test&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;object, mask&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; fn = JSM.&lt;span style="color: #006600;"&gt;methods&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;mask&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
      setTimeout&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  object.&lt;span style="color: #006600;"&gt;value&lt;/span&gt; = fn&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; object.&lt;span style="color: #006600;"&gt;value&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;,&lt;span style="color: #CC0000;"&gt;1&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Assim, sempre que eu pensar em estender a classe, eu vou estender JSM.Class. Ela que vai armazenar o escopo do objeto retornado. É um padrão que eu tenho adotado em alguns projetos meus.&lt;/p&gt;
&lt;p&gt;O método add é uma abstração da forma como é estendido o objeto na adição de máscaras novas, o desenvolvedor não precisa pensar em como foi montado o objeto JSM para estendê-lo corretamente, basta utilizar este método auxiliar que abstrai esta complexidade.&lt;/p&gt;
&lt;p&gt;Então se eu quisesse estender o objeto com uma máscara nova eu faria:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;  JSM.&lt;span style="color: #006600;"&gt;add&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #3366CC;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;:&lt;span style="color: #3366CC;"&gt;&amp;quot;telefone&amp;quot;&lt;/span&gt;,
    &lt;span style="color: #3366CC;"&gt;&amp;quot;method&amp;quot;&lt;/span&gt;: &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;v&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #009900; font-style: italic;"&gt;//Remove tudo o que não é dígito&lt;/span&gt;
      v=v.&lt;span style="color: #006600;"&gt;replace&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0066FF;"&gt;/\D/g&lt;/span&gt;,&lt;span style="color: #3366CC;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; 
&amp;nbsp;
      &lt;span style="color: #009900; font-style: italic;"&gt;//Coloca parênteses em volta dos dois primeiros dígitos&lt;/span&gt;
      v=v.&lt;span style="color: #006600;"&gt;replace&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0066FF;"&gt;/^&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;\d\d&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;\d&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;/g&lt;/span&gt;,&lt;span style="color: #3366CC;"&gt;&amp;quot;($1) $2&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; 
&amp;nbsp;
      &lt;span style="color: #009900; font-style: italic;"&gt;//Coloca hífen entre o quarto e o quinto dígitos&lt;/span&gt;
      v=v.&lt;span style="color: #006600;"&gt;replace&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0066FF;"&gt;/&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;\d&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;4&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;\d&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;/&lt;/span&gt;,&lt;span style="color: #3366CC;"&gt;&amp;quot;$1-$2&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; v
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O desenvolvedor utilizaria esse método dando um nome e fornecendo um método que pega o valor, trata e retorna o novo valor mascarado, sem se preocupar no funcionamento do objeto.&lt;/p&gt;
&lt;p&gt;Adicionado este método já poderia usar na instância do objeto JSM assim:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="javascript"&gt;  JSM&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;formulario&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;mask&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #3366CC;"&gt;&amp;quot;campoTelefone&amp;quot;&lt;/span&gt; : &lt;span style="color: #3366CC;"&gt;&amp;quot;telefone&amp;quot;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;É mais rápido e mais fácil pegar os elementos pelo nome nos formulários, então o parâmetro do JSM é um name, do formulário, &amp;#8220;campoTelefone&amp;#8221; é o name de um input text deste formulário e telefone é a mascara que queremos utilizar no campo.&lt;/p&gt;
&lt;p&gt;O JSM quebra a string da máscara quando esta tem um &amp;#8220;|&amp;#8221; (pipe), ou seja, na chamada da função você pode adicionar duas ou mais máscaras para o mesmo campo se necessário:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="javascript"&gt;  JSM&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;formulario&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;mask&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #3366CC;"&gt;&amp;quot;campoTelefone&amp;quot;&lt;/span&gt; : &lt;span style="color: #3366CC;"&gt;&amp;quot;leech|digitos&amp;quot;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;- &amp;#8220;Você esqueceu de fornecer um método para definir um maxlength!!&amp;#8221;&lt;br /&gt;
Isto não é a função do objeto, é função do html, portanto, deve estar definido na própria tag! Simplifique.&lt;/p&gt;
&lt;p&gt;Não fiz o objeto percorrer o html para achar uma classe conveniente e fazer o mascaramento, porque não é o papel dele, ele deve apenas mascarar, esta é sua função.&lt;/p&gt;
&lt;p&gt;Se quiser fazer um microformato para ele, usando uma classe Css para este funcionamento, deve montar uma outra aplicação com este propósito, importando e utilizando o objeto JSM.&lt;/p&gt;
&lt;p&gt;Eu queria mostrar, uma maneira simples de solucionar um problema de cada vez, com um objeto encapsulado. É muito fácil desacoplar os métodos adicionados para as máscaras e colocar em arquivos separados e mesmo outros métodos que estendam a classe JSM.Class, importando naquela página apenas os métodos que precisa utilizar, ou então utilizando as partes em uma aplicação terceira que faça outras coisas mais&amp;#8230;&lt;/p&gt;
&lt;p&gt;Eu uso muito namespaces, modularizando meu projeto. Portanto, se eu quisesse fazer uma extensão da classe com alguma frescura que não necessariamente seja algo de útil, eu faria outro arquivo para importar, usando namespace: Ex: JSM.frescura.js.&lt;/p&gt;
&lt;p&gt;Entenderam? Sacaram a parada?  Postei o código inteiro, com todas as máscaras que vi do site do Elcio e com suas explicações &lt;a href="http://scriptbrasil.com.br/forum/index.php?s=fb1ef65d1022fd838879ea8f3643d8fe&amp;amp;showtopic=135530" title="Fórum ScriptBrasil#jsMask"&gt;aqui&lt;/a&gt; para quem quiser.&lt;/p&gt;
&lt;p&gt;Abraço.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/M8cz9PvvNh77Vc8W93O3AWYaiSY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M8cz9PvvNh77Vc8W93O3AWYaiSY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/M8cz9PvvNh77Vc8W93O3AWYaiSY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/M8cz9PvvNh77Vc8W93O3AWYaiSY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/menos-e-mais-quanto-mais-simples-melhor/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Eduardo Ottaviani</name>
						<uri>http://javiani.wordpress.com</uri>
					</author>
		<title type="html"><![CDATA[Feature Detecting]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/oba4IOwotfw/" />
		<id>http://clientside.com.br/feature-detecting/</id>
		<updated>2009-02-09T00:44:34Z</updated>
		<published>2009-02-09T00:44:34Z</published>
		<category scheme="http://clientside.com.br" term="Boas práticas" /><category scheme="http://clientside.com.br" term="Javascript" /><category scheme="http://clientside.com.br" term="jQuery" /><category scheme="http://clientside.com.br" term="feature detecting" />		<summary type="html"><![CDATA[ 	E aí povo!?! Feliz 2009 para todos!
O ano passa rápido, só agora que vim postar de novo percebi que postei há quase um ano aqui no ClientSide. Bom, neste post gostaria de comentar mais uma vez sobre algumas técnicas de programação em javascript, levando carona na febre jQuery.
Para mim, o mais interessante dessas bibliotecas é [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/feature-detecting/">&lt;p&gt; 	E aí povo!?! Feliz 2009 para todos!&lt;/p&gt;
&lt;p&gt;O ano passa rápido, só agora que vim postar de novo percebi que postei há quase um ano aqui no ClientSide. Bom, neste post gostaria de comentar mais uma vez sobre algumas técnicas de programação em javascript, levando carona na febre jQuery.&lt;/p&gt;
&lt;p&gt;Para mim, o mais interessante dessas bibliotecas é como os desenvolvedores utilizam as mais variadas técnicas para resolver seus problemas. Vocês viram que saiu a versão 1.3 do jQuery?&lt;/p&gt;
&lt;p&gt;Uma coisa que me chamou muita atenção nessa nova versão é o uso de uma técnica chamada &amp;#8220;Feature Detecting&amp;#8221;, que além de aumentar o desempenho ainda aumentou a gama de compatibilidade com os navegadores.&lt;/p&gt;
&lt;p&gt;Eu não quero pegar pesado, então vou falar a grosso modo de como funciona essa técnica para que maioria ou todos possam entender.No desenvolvimento com Js, foi e ainda é muito comum o uso de browser sniffing, que é a detecção de qual navegador o usuário está usando para poder usar determinado script. &lt;a href="http://www.jibbering.com/faq/faq_notes/not_browser_detect.html#bdDif"&gt;Como este código&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O grande problema do uso desta técnica é que ela limita o número de browsers compatíveis com a sua aplicação, excluindo outros browsers que não entram na detecção.&lt;/p&gt;
&lt;p&gt;Outro problema é que a cada trecho do código é necessário executar uma verificação para descobrir qual browser está sendo usado e o tamanho do código aumenta generosamente conforme a necessidade de acrescentar um novo browser compatível.&lt;/p&gt;
&lt;p&gt;Há outras desvantagens, mas neste post não caberiam todas elas.Eu usava feature detecting mesmo sem saber que tinha este nome, meio sem querer, confesso que usava por pura preguiça, porque eu odiava aquela história de navigator.appName.&lt;/p&gt;
&lt;p&gt;Terrível isso. A solução que eu usava e compartilho com vocês foi essa:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; feature&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; support &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; x &lt;span style="color: #000066; font-weight: bold;"&gt;in&lt;/span&gt; support &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    feature&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;x&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = support&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;x&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Eu renomeei as funções para fazer sentido à este post, usava outros nomes. A idéia é usar um objeto feature com as funcionalidades que desejo e usar uma função support, para definir quais delas existirão.&lt;/p&gt;
&lt;p&gt;Já tentaram pegar o estilo de um elemento que foi definido apenas no Css?  Assim:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #000066;"&gt;alert&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; document.&lt;span style="color: #006600;"&gt;getElementById&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;caixa&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;style&lt;/span&gt;.&lt;span style="color: #006600;"&gt;height&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;O retorno seria vazio, o Js só conseguiria retornar o valor se este fosse antes definido pelo Js ou se usasse style inline (credo&amp;#8230;).&lt;/p&gt;
&lt;p&gt;Para pegar o estilo do elemento definido apenas pelo Css, nos browsers comuns usamos : &lt;strong&gt;document.defaultView.getComputedStyle&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Porém no iE, se usa: &lt;strong&gt;document.getElementById(&amp;#8221;caixa&amp;#8221;).currentStyle&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agora, utilizando as funções anteriores, o feature detecting ficaria:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; support&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; support = &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #009900; font-style: italic;"&gt;// Style:&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;try&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    document.&lt;span style="color: #006600;"&gt;defaultView&lt;/span&gt;.&lt;span style="color: #006600;"&gt;getComputedStyle&lt;/span&gt;
    support&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;computedStyle&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el, att&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; document.&lt;span style="color: #006600;"&gt;defaultView&lt;/span&gt;.&lt;span style="color: #006600;"&gt;getComputedStyle&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el, &lt;span style="color: #003366; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;getPropertyValue&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;att&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;catch&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;e&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; support&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;“computedStyle”&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; support
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Este código não verifica qual navegador o usuário está usando, porque aqui não interessa.&lt;/p&gt;
&lt;p&gt;O script vai testar se o navegador possui a propriedade, se possuir, constrói um objeto support[“computedStyle”] , que é uma função que retorna o estilo do objeto HTML. Definindo esta propriedade no support, eu teria meus objetos features da seguinte forma:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="javascript"&gt;feature&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; support&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #009900; font-style: italic;"&gt;// …. Códigos e mais códigos&lt;/span&gt;
&lt;span style="color: #000066;"&gt;alert&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; feature.&lt;span style="color: #006600;"&gt;computedStyle&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900; font-style: italic;"&gt;// Mostraria o corpo da função computedStyle.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;O instinto nos levaria a colocar a função que contém a propriedade currentStyle no &lt;strong&gt;catch&lt;/strong&gt; e fim. Mas aí estaríamos assumindo que todos os navegadores usam a propriedade do &lt;strong&gt;document.defaultView&lt;/strong&gt; e os que não usam são os iE´s da vida. Mas não é a melhor forma de pensar.&lt;/p&gt;
&lt;p&gt;A melhor forma de fazer isso seria aninhar mais um teste verificando se o navegador possui a propriedade currentStyle, e retornar uma função conveniente. Há um sério problema nesse caso, não é possível testar o currentStyle, porque ele pertence à um objeto HTML, que não sabemos qual vai ser até a função ser chamada.&lt;/p&gt;
&lt;p&gt;Ele tem a forma : &lt;strong&gt;elemento.currentStyle.height&lt;/strong&gt;. O support definiria todas as funções antes mesmo do documento estar pronto, não daria para testar um elemento, sem saber qual elemento é.&lt;/p&gt;
&lt;p&gt;Outro instinto ( assassino) seria testar um activeXObject para saber se é um iE ou ainda testar pelo navigator.appName se é um iE6. Isso seria completamente o oposto do que a filosofia do feature detecting prega. Estaria retornando às técnicas de browser sniffing.&lt;/p&gt;
&lt;p&gt;A solução que eu encontrei foi essa:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; feature&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; support &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; x &lt;span style="color: #000066; font-weight: bold;"&gt;in&lt;/span&gt; support &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    feature&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;x&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = support&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;x&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;  
&amp;nbsp;
&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; support&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; support = &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #009900; font-style: italic;"&gt;// Style:&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;try&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    document.&lt;span style="color: #006600;"&gt;defaultView&lt;/span&gt;.&lt;span style="color: #006600;"&gt;getComputedStyle&lt;/span&gt;
    support&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;computedStyle&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el, att&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; document.&lt;span style="color: #006600;"&gt;defaultView&lt;/span&gt;.&lt;span style="color: #006600;"&gt;getComputedStyle&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el, &lt;span style="color: #003366; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;getPropertyValue&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;att&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;catch&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;e&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      support&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;computedStyle&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el, att&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; ieComputedStyle = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el, att&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
          &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; att == &lt;span style="color: #3366CC;"&gt;&amp;quot;opacity&amp;quot;&lt;/span&gt; &amp;amp;amp;&amp;amp;amp; el.&lt;span style="color: #006600;"&gt;filters&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
            &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; parseFloat&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;support&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;computedStyle&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el, &lt;span style="color: #3366CC;"&gt;&amp;quot;filter&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;replace&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0066FF;"&gt;/\D/gi&lt;/span&gt;, &lt;span style="color: #3366CC;"&gt;''&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;/&lt;span style="color: #CC0000;"&gt;100&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
          &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; el.&lt;span style="color: #006600;"&gt;currentStyle&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;att&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
        &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
          &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el.&lt;span style="color: #006600;"&gt;currentStyle&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
            feature&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;computedStyle&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = ieComputedStyle
            &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; ieComputedStyle&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;el, att&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
          &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; feature&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;computedStyle&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;null&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
      &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;    
&amp;nbsp;
feature&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; support&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #000066;"&gt;alert&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; feature.&lt;span style="color: #006600;"&gt;computedStyle&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No &lt;strong&gt;catch&lt;/strong&gt; a função computedStyle testa se o elemento passado como argumento possui uma propriedade currentStyle. Se possuir, o objeto feature.computedStyle é alterado e passa a ser uma função que retorna o currentStyle do elemento. Essa função também teria de tratar o atributo &amp;#8220;opacity&amp;#8221; , porque se for um iE que estiver executando e este iE não tiver opacity, mas um filter, ele vai funcionar da mesma forma.&lt;/p&gt;
&lt;p&gt;Neste ponto ela é recursiva, porque chama ela mesma para retornar a propriedade filter. Para os navegadores que implementam o &lt;strong&gt;document.defaultView.getComputedStyle&lt;/strong&gt; o método &lt;strong&gt;computedStyle&lt;/strong&gt; do feature vai ser implementado logo no load do código. Já os outros, o método seria definido apenas após a sua primeira chamada.&lt;/p&gt;
&lt;p&gt;É fácil de enxergar isso fazendo:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="javascript"&gt;feature&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; support&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; obj = document.&lt;span style="color: #006600;"&gt;getElementById&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;box&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #000066;"&gt;alert&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; feature.&lt;span style="color: #006600;"&gt;computedStyle&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900; font-style: italic;"&gt;// Mostra função de teste&lt;/span&gt;
&lt;span style="color: #000066;"&gt;alert&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; feature.&lt;span style="color: #006600;"&gt;computedStyle&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; obj, &lt;span style="color: #3366CC;"&gt;&amp;quot;height&amp;quot;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900; font-style: italic;"&gt;// Chama a função de teste e define o método novo para feature.computedStyle e retornando o valor do height.&lt;/span&gt;
&lt;span style="color: #000066;"&gt;alert&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; feature.&lt;span style="color: #006600;"&gt;computedStyle&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900; font-style: italic;"&gt;// Mostra o método final&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Não seria mais necessário haver testes, cada navegador implementaria a sua função. Entenderam a idéia mais ou menos?&lt;/p&gt;
&lt;p&gt;Então, esse trecho acima deve funcionar no Opera, Chrome, FF2, FF3, IE6, iE7 sem que fosse necessário qualquer detecção de browser, em nenhum momento especifiquei no código que navegador deve funcionar em cada trecho.&lt;/p&gt;
&lt;p&gt;Para os que quiserem uma literatura mais refinada sobre esse assunto, sugiro este link:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://docs.jquery.com/Utilities/jQuery.support"&gt;http://docs.jquery.com/Utilities/jQuery.support&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lá possui 3 links sobre feature detecting, usei um deles no primeiro exemplo. Tem um ótimo exemplo para um método clipBoardData. Eu também deixei um trecho com mais &amp;#8220;features&amp;#8221;, XML, Ajax e opacity para ajudar a entender a lógica que usei.&lt;/p&gt;
&lt;p&gt;Para quem estiver interessado, está aqui :&lt;/p&gt;
&lt;p&gt;&lt;a href="http://edu.110mb.com/demonstracao/feature.detecting.js"&gt;http://edu.110mb.com/demonstracao/feature.detecting.js&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Um abraço a todos&lt;/p&gt;
&lt;p&gt;Valeu!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/He3wmi41qguYS2RKlK02PkjTIPc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/He3wmi41qguYS2RKlK02PkjTIPc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/He3wmi41qguYS2RKlK02PkjTIPc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/He3wmi41qguYS2RKlK02PkjTIPc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/feature-detecting/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Wadson Gomes</name>
					</author>
		<title type="html"><![CDATA[Validar extensões de arquivos com javascript]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/aQ1t56Oq7eY/" />
		<id>http://clientside.com.br/validar-extensoes-de-arquivos-com-javascript-2/</id>
		<updated>2009-01-05T21:11:01Z</updated>
		<published>2009-01-05T21:07:19Z</published>
		<category scheme="http://clientside.com.br" term="Javascript" />		<summary type="html"><![CDATA[A função que desenvolvi tem com objetivo facilitar a vida de quem for validar extensões de arquivos com javascript antes de enviar ao servidor.

Seu uso é fácil já que ela só retorna um valor, sendo este true ou false.
Aceita varias extensões para um mesmo campo
Pode ser aplicada a vários campos usando um array de uma [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/validar-extensoes-de-arquivos-com-javascript-2/">&lt;p&gt;A função que desenvolvi tem com objetivo facilitar a vida de quem for validar extensões de arquivos com javascript antes de enviar ao servidor.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Seu uso é fácil já que ela só retorna um valor, sendo este true ou false.&lt;/li&gt;
&lt;li&gt;Aceita varias extensões para um mesmo campo&lt;/li&gt;
&lt;li&gt;Pode ser aplicada a vários campos usando um array de uma TagName ou ClassName&lt;/li&gt;
&lt;li&gt;Usa uma expressão regular para validar a extensão&lt;/li&gt;
&lt;li&gt;Pode ser usada no onblur do campo&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Codigo da função&lt;/h3&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; LexExt&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;dom,ext&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; campo=dom.&lt;span style="color: #006600;"&gt;value&lt;/span&gt;;
  &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; exts=ext.&lt;span style="color: #006600;"&gt;split&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;','&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;
  &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;ext.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;&amp;gt;=&lt;span style="color: #CC0000;"&gt;1&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;i=&lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;;i&amp;lt;exts.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;;i++&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; reg=&lt;span style="color: #003366; font-weight: bold;"&gt;new&lt;/span&gt; RegExp&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;+exts&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;+&lt;span style="color: #3366CC;"&gt;&amp;quot;$&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;
      &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;campo.&lt;span style="color: #006600;"&gt;match&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;reg&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;==&lt;span style="color: #003366; font-weight: bold;"&gt;null&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;i==exts.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;-1&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
          &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;;
        &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
      &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;else&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;true&lt;/span&gt;;
      &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;Chamando a função&lt;/h3&gt;
&lt;p&gt;O primeiro parâmetro é o campo que receberá a validação&lt;br /&gt;
O segundo parâmetro são as extensões (sem o ponto)&lt;br /&gt;
Ex: LexExt($(&amp;#8217;my&amp;#8217;),&amp;#8217;jpg,gif,png,html,css,js&amp;#8217;);&lt;/p&gt;
&lt;h3&gt;Exemplos práticos&lt;/h3&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #009900; font-style: italic;"&gt;// usando pelo id do campo&lt;/span&gt;
LexExt&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;document.&lt;span style="color: #006600;"&gt;getElementById&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;‘my’&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;,’doc,docx’&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span style="color: #009900; font-style: italic;"&gt;// usando atraves de um array&lt;/span&gt;
&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; dom = document.&lt;span style="color: #006600;"&gt;getElementsByClassName&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;‘file’&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;
&lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; i=&lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;;i&amp;lt;dom.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;;i++&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
LexExt&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;dom&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;,’jpg,gif’&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0g5QEizpZlM3ECF4d8i8x9jJaXQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0g5QEizpZlM3ECF4d8i8x9jJaXQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0g5QEizpZlM3ECF4d8i8x9jJaXQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0g5QEizpZlM3ECF4d8i8x9jJaXQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/validar-extensoes-de-arquivos-com-javascript-2/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>elcio</name>
						<uri>http://blog.elcio.com.br</uri>
					</author>
		<title type="html"><![CDATA[Cidades e Estados em Javascript]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/Ahpjk-06x6U/" />
		<id>http://clientside.com.br/cidades-e-estados-em-javascript/</id>
		<updated>2008-10-06T18:22:58Z</updated>
		<published>2008-10-06T18:22:58Z</published>
		<category scheme="http://clientside.com.br" term="Boas práticas" /><category scheme="http://clientside.com.br" term="Javascript" /><category scheme="http://clientside.com.br" term="Link" /><category scheme="http://clientside.com.br" term="jQuery" />		<summary type="html"><![CDATA[Meu amigo DGMike publicou:
Cidades e Estados em Javascript: Uma das dúvidas mais comuns para quem está começando ajax é criar uma função que chame os estados e cidades nacionais. Sempre tenho que explicar uma serie de coisas como objeto httpRequest ou mesmo um mínimo de jQuery.
Pensando nos programadores do Brasil, desenvolvi este script de selects [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/cidades-e-estados-em-javascript/">&lt;p&gt;Meu amigo &lt;a href="http://dgmike.com.br"&gt;DGMike&lt;/a&gt; publicou:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://dgmike.com.br/2008/10/cidades-e-estados-em-javascript/"&gt;Cidades e Estados em Javascript&lt;/a&gt;: Uma das dúvidas mais comuns para quem está começando ajax é criar uma função que chame os estados e cidades nacionais. Sempre tenho que explicar uma serie de coisas como objeto httpRequest ou mesmo um mínimo de jQuery.&lt;br /&gt;
Pensando nos programadores do Brasil, desenvolvi este script de selects de estado e cidades do Brasil. Pensando nisso, resolvi escrever uma biblioteca que resolva este problema, além de estar disponível em uma única URL (hospedado no google) no qual qualquer um pode utilizar. Assim, o usuário guarda em cache apenas um arquivo, e se o usuário passar em um site que chama a biblioteca, no próximo site que ele entrar e usar a biblioteca de novo, carregará o arquivo em cache e não precisará fazer o download de novo.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Idéia muito boa. Vou passar a usar em meus formulários.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EUAcN1ECkRmcFJSyDoFrfVbAinw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EUAcN1ECkRmcFJSyDoFrfVbAinw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EUAcN1ECkRmcFJSyDoFrfVbAinw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EUAcN1ECkRmcFJSyDoFrfVbAinw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/cidades-e-estados-em-javascript/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>leandro</name>
						<uri>http://websaudavel.com</uri>
					</author>
		<title type="html"><![CDATA[Bug em textos com negrito carregados via ajax no IE7]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/LogDIjlSUEc/" />
		<id>http://clientside.com.br/bug-em-textos-com-negrito-carregados-via-ajax-no-ie7/</id>
		<updated>2008-05-27T20:05:11Z</updated>
		<published>2008-06-02T16:03:54Z</published>
		<category scheme="http://clientside.com.br" term="Ajax" /><category scheme="http://clientside.com.br" term="CSS" /><category scheme="http://clientside.com.br" term="Javascript" /><category scheme="http://clientside.com.br" term="anti-aliasing" /><category scheme="http://clientside.com.br" term="bold" /><category scheme="http://clientside.com.br" term="bug" /><category scheme="http://clientside.com.br" term="ie7" /><category scheme="http://clientside.com.br" term="internet explorer 7" /><category scheme="http://clientside.com.br" term="negrito" /><category scheme="http://clientside.com.br" term="serrilhado" />		<summary type="html"><![CDATA[
Palavra do Editor: nosso amigo Leandro publicou esse artigo relatando um bug, sem solução (a solução dele é &#8220;não use&#8221;.) Se você conhece uma solução melhor, por favor, escreva um comentário ou um novo artigo em resposta a esse.

O problema
Estava lá eu, todo pimpão e alegre em casa, fazendo minhas requisições em ajax funcionar em [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/bug-em-textos-com-negrito-carregados-via-ajax-no-ie7/">&lt;blockquote&gt;&lt;p&gt;
&lt;strong&gt;Palavra do Editor&lt;/strong&gt;: nosso amigo Leandro publicou esse artigo relatando um bug, sem solução (a solução dele é &amp;#8220;não use&amp;#8221;.) Se você conhece uma solução melhor, por favor, escreva um comentário ou um novo artigo em resposta a esse.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;h4&gt;O problema&lt;/h4&gt;
&lt;p&gt;Estava lá eu, todo pimpão e alegre em casa, fazendo minhas requisições em ajax funcionar em um projeto que ando trabalhando e quando decido testar em outros navegadores, tal como o nosso excelentíssimo Internet Explorer 7 eu percebo: &amp;#8220;Olha mãe! A requisição funcionou beleza no ie7&amp;#8243;. Sim, funcionou sim com um pequeno inconveniente: parte do conteúdo carregado &amp;#8220;on-the-fly&amp;#8221; pela requisição &amp;#8216;ajax&amp;#8217; veio meio distorcida (&lt;a href="http://img221.imageshack.us/img221/5788/bugie7nl5.gif" title="Pedaço do print screen do defeito"&gt;print screen com o trecho bugado&lt;/a&gt;) e eu então percebi que essas distorções (que na verdade são problemas de anti-aliasing desabilitado no ie7 ou algo do gênero) seguem um padrão para que elas aconteçam: qualquer texto que esteja em negrito carregado pela requisição ajax sofrerá desse problema.&lt;/p&gt;
&lt;h4&gt;Causas&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Processar algoritmos de anti-aliasing (anti serrilhamento) deve ser um processo diferente para textos em negrito e talvez o pessoal do desenvolvimento da MS esqueceram de mandar processar esses algoritmos para textos em negritos carregados via ajax e ninguém avisou eles! Coitadinhos!&lt;/li&gt;
&lt;li&gt;Ou simplesmente o algoritmo não funciona nesses casos de requisição via ajax. Afinal, who cares!&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Solução&lt;/h4&gt;
&lt;p&gt;Para falar a verdade o porque disso acontecer não é muito importante. O importante é que eu aparentemente não achei solução para esse problema e a melhor dica que dou para contornar isso é: &lt;strong&gt;evite usar textos em negritos dentro  de pedaços de html oriundas de requisições em ajax no ie7&lt;/strong&gt;. Existem N maneiras de se fazer isso e a mais simples delas, IMO,  é modificar os seletores CSS de modo que não tenham valores que os negritem (no caso font-weight:700; ou font-weight:bold; são exemplos de propriedade/valor que negritam o texto) somente no Internet Explorer 7.&lt;/p&gt;
&lt;p&gt;Uma das formas de se fazer isso é fazer um seletor para tais texto parecido com esse (CSS):&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
.no-ie7-bold {font-weight:700 !important;font-weight:normal;}&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aí toda vez que você tiver textos que precisem ser negritados oriundos de requisições em ajax use uma classe semelhante a essa acima nos devidos elementos. Ela fará com que o texto não seja negritado apenas no IE7 (minto, no IE6 também não será e talvez nos seus ancestrais idem). Mas acredito eu que existam hacks de seletores que apenas o IE7 entenda. Sinta-se livre para melhorar a receita do bolo. Meu papel aqui é basicamente reportar esse bug nefasto do IE7.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/csbppRNII41deWTsdoJNra-SpP8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/csbppRNII41deWTsdoJNra-SpP8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/csbppRNII41deWTsdoJNra-SpP8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/csbppRNII41deWTsdoJNra-SpP8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/bug-em-textos-com-negrito-carregados-via-ajax-no-ie7/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>JulioGreff</name>
						<uri>http://www.juliogreff.blog.br</uri>
					</author>
		<title type="html"><![CDATA[Upload Assíncrono de Arquivos com Mootools]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/f19fF9d7-tM/" />
		<id>http://clientside.com.br/upload-assincrono-de-arquivos-com-mootools/</id>
		<updated>2008-05-25T21:49:27Z</updated>
		<published>2008-05-25T21:49:27Z</published>
		<category scheme="http://clientside.com.br" term="Ajax" /><category scheme="http://clientside.com.br" term="Frameworks" /><category scheme="http://clientside.com.br" term="mootools" /><category scheme="http://clientside.com.br" term="upload" />		<summary type="html"><![CDATA[Por questões de segurança, os navegadores não permitem que o JavaScript acesse o sistema de arquivos do cliente, inviabilizando o upload via ajax no ambiente web. Assim, temos que criar alternativas para o upload assíncrono. Vários já criaram soluções para o problema, mas a maioria como funções autônomas. Como sou fã da Mootools, decidi criar [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/upload-assincrono-de-arquivos-com-mootools/">&lt;p&gt;Por questões de segurança, os navegadores não permitem que o JavaScript acesse o sistema de arquivos do cliente, inviabilizando o upload via ajax no ambiente web. Assim, temos que criar alternativas para o upload assíncrono. &lt;a href="http://www.elmicox.com/2007/upload-assincrono-iframe-como-ajax-1-funcao-simples/"&gt;Vários&lt;/a&gt; já criaram soluções para o problema, mas a maioria como funções autônomas. Como sou fã da &lt;a href="http://mootools.net/"&gt;Mootools&lt;/a&gt;, decidi criar a minha solução, e vou aproveitar para explicá-la aqui.&lt;/p&gt;
&lt;h3&gt;A Lógica&lt;/h3&gt;
&lt;p&gt;A lógica para essa &amp;#8220;gambiarra&amp;#8221; não é nova, já existe desde que o HTML é HTML. Existe o atributo target da tag form. Através dele, podemos escolher em que janela queremos que seja feita a submissão. Então a página não recarregará, e o resultado do formulário será carregado em outra janela.&lt;/p&gt;
&lt;p&gt;Aí surge o primeiro porém: não queremos abrir uma nova janela (pop-ups são chatos, não concorda?)! Lembro que, nas minhas primeiras experiências com HTML e frames, podíamos fazer com que links abrissem em determinado frame através do mesmo atributo. Mas como também não queremos frames, vamos utilizar um irmão mais novo: o iframe.&lt;/p&gt;
&lt;p&gt;Simplificando, a idéia é enviar o formulário para um iframe invisível, e recuperar a resposta quando este tiver terminado de carregar.&lt;/p&gt;
&lt;h3&gt;Preparando o Script&lt;/h3&gt;
&lt;p&gt;Desde o começo, pensei em fazer o script bem integrado à Mootools, como se fosse um plugin. Para isso, usei o mesmo processo utilizado para todas as funcionalidades relacionadas ao HTML: &lt;a href="http://juliogreff.blog.br/mootools-classes/" title="Mootools - Classes"&gt;estendi a classe&lt;/a&gt; Element com um método upload:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;Element.&lt;span style="color: #006600;"&gt;extend&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #3366CC;"&gt;&amp;quot;upload&amp;quot;&lt;/span&gt;: &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;options&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;getTag&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; != &lt;span style="color: #3366CC;"&gt;&amp;quot;form&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Também incluí uma pequena verificação na linha 3: se não for um formulário, não devemos submeter!&lt;/p&gt;
&lt;h3&gt;Criando o IFrame&lt;/h3&gt;
&lt;p&gt;Como não devemos deixar um iframe perdido pelo documento, vamos criá-lo pelo JavaScript também. Seguindo o código:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;4
5
6
7
8
9
10
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; iFrame = &lt;span style="color: #003366; font-weight: bold;"&gt;new&lt;/span&gt; Element&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;iframe&amp;quot;&lt;/span&gt;, &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #3366CC;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;,
  &lt;span style="color: #3366CC;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;,
  &lt;span style="color: #3366CC;"&gt;&amp;quot;styles&amp;quot;&lt;/span&gt;: &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;display&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;none&amp;quot;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;adopt&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;iFrame&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
window.&lt;span style="color: #006600;"&gt;frames&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #000066;"&gt;name&lt;/span&gt; = &lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt; &lt;span style="color: #009900; font-style: italic;"&gt;// IE... Sempre ele...&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Para criá-lo, utilizei a classe &lt;a href="http://docs.mootools.net/Native/Element.js#Element.initialize"&gt;Element&lt;/a&gt;, nativa da Mootools. Em uma chamada, já defini todos os atributos necessários. Primeiro, precisamos de um ID para localizarmos o iframe quando for necessário. O nome serve para o iframe ser identificado no target. O estilo só serve pra esconder o iframe.&lt;/p&gt;
&lt;p&gt;Logo abaixo, fiz com que o formulário &amp;#8220;adotasse&amp;#8221; o iframe. Ele precisa estar em algum lugar para funcionar&amp;#8230; Ah, e a correção made-for-IE, não esqueça dela!&lt;/p&gt;
&lt;p&gt;Agora, precisamos saber quando o iframe carregou, para podermos disparar um callback com o retorno da requisição. Para isso, usamos o método addEvent, também da Mootools. No &amp;#8220;load&amp;#8221; do iframe, disparamos uma função onComplete, definida no parâmetro lá na definição da função.&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;11
12
13
14
15
16
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;iFrame.&lt;span style="color: #006600;"&gt;addEvent&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;load&amp;quot;&lt;/span&gt;, &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  iFrame.&lt;span style="color: #006600;"&gt;removeEvent&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;load&amp;quot;&lt;/span&gt;, arguments.&lt;span style="color: #006600;"&gt;callee&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900; font-style: italic;"&gt;// removemos o evento, para que ele não dispare novamente&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;$type&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;options.&lt;span style="color: #006600;"&gt;onComplete&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; == &lt;span style="color: #3366CC;"&gt;&amp;quot;function&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    options.&lt;span style="color: #006600;"&gt;onComplete&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;iFrame.&lt;span style="color: #006600;"&gt;contentDocument&lt;/span&gt;.&lt;span style="color: #006600;"&gt;body&lt;/span&gt;.&lt;span style="color: #006600;"&gt;innerHTML&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
  iFrame.&lt;span style="color: #006600;"&gt;remove&lt;/span&gt;.&lt;span style="color: #006600;"&gt;delay&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;20&lt;/span&gt;, iFrame&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note que usei a propriedade contentDocument para recuperar a resposta da requisição. Com a &amp;#8220;Same Origin Policy&amp;#8221; (Política de Mesma Origem), só conseguimos recuperar a resposta de requisições feitas dentro do mesmo domínio. Existem maneiras de se driblar isso, mas o script se tornaria muito menos versátil, pois não consegui uma forma de executar funções com a resposta.&lt;/p&gt;
&lt;p&gt;Executado o papel do nosso iframe, não precisamos mais dele populando nosso HTML, mas não podemos removê-lo imediatamente, pois assim causaríamos um &amp;#8220;loading&amp;#8221; que não terminaria. Então &amp;#8220;atrasei&amp;#8221; a função em alguns milissegundos, evitando esse probleminha.&lt;/p&gt;
&lt;h3&gt;Adaptando o Formulário&lt;/h3&gt;
&lt;p&gt;Se estamos criando um script para isso, você não quer ir lá e definir todos os atributos manualmente, quer? Então fiz com que o próprio script cuidasse disso. Apenas defini o target, o encoding e o método do formulário (só por segurança, caso ele não tenha sidio definido):&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;17
18
19
20
21
22
23
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;setProperties&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #3366CC;"&gt;&amp;quot;target&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;,
  &lt;span style="color: #3366CC;"&gt;&amp;quot;enctype&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;multipart/form-data&amp;quot;&lt;/span&gt;,
  &lt;span style="color: #3366CC;"&gt;&amp;quot;encoding&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;multipart/form-data&amp;quot;&lt;/span&gt;,
  &lt;span style="color: #3366CC;"&gt;&amp;quot;method&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;post&amp;quot;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;Código Completo&lt;/h3&gt;
&lt;p&gt;Juntando tudo isso, temos o código abaixo:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;Element.&lt;span style="color: #006600;"&gt;extend&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #3366CC;"&gt;&amp;quot;upload&amp;quot;&lt;/span&gt;: &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;options&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;getTag&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; != &lt;span style="color: #3366CC;"&gt;&amp;quot;form&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;
    &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; iFrame = &lt;span style="color: #003366; font-weight: bold;"&gt;new&lt;/span&gt; Element&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;iframe&amp;quot;&lt;/span&gt;, &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #3366CC;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;,
      &lt;span style="color: #3366CC;"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;,
      &lt;span style="color: #3366CC;"&gt;&amp;quot;styles&amp;quot;&lt;/span&gt;: &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;display&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;none&amp;quot;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;adopt&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;iFrame&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    window.&lt;span style="color: #006600;"&gt;frames&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #000066;"&gt;name&lt;/span&gt; = &lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;
    iFrame.&lt;span style="color: #006600;"&gt;addEvent&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;load&amp;quot;&lt;/span&gt;, &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      iFrame.&lt;span style="color: #006600;"&gt;removeEvent&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;load&amp;quot;&lt;/span&gt;, arguments.&lt;span style="color: #006600;"&gt;callee&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;$type&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;options.&lt;span style="color: #006600;"&gt;onComplete&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; == &lt;span style="color: #3366CC;"&gt;&amp;quot;function&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
        options.&lt;span style="color: #006600;"&gt;onComplete&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;iFrame.&lt;span style="color: #006600;"&gt;contentDocument&lt;/span&gt;.&lt;span style="color: #006600;"&gt;body&lt;/span&gt;.&lt;span style="color: #006600;"&gt;innerHTML&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
      iFrame.&lt;span style="color: #006600;"&gt;remove&lt;/span&gt;.&lt;span style="color: #006600;"&gt;delay&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;20&lt;/span&gt;, iFrame&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;setProperties&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #3366CC;"&gt;&amp;quot;target&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;fileUpload&amp;quot;&lt;/span&gt;,
      &lt;span style="color: #3366CC;"&gt;&amp;quot;enctype&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;multipart/form-data&amp;quot;&lt;/span&gt;,
      &lt;span style="color: #3366CC;"&gt;&amp;quot;encoding&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;multipart/form-data&amp;quot;&lt;/span&gt;,
      &lt;span style="color: #3366CC;"&gt;&amp;quot;method&amp;quot;&lt;/span&gt;: &lt;span style="color: #3366CC;"&gt;&amp;quot;post&amp;quot;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;Utilização&lt;/h3&gt;
&lt;p&gt;Para utilizar o código, é ainda mais simples. Basta definir, no onSubmit do formulário, nossa função:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;&lt;pre class="javascript"&gt;$&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;window&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;addEvent&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;load&amp;quot;&lt;/span&gt;, &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #009900; font-style: italic;"&gt;// primeiro esperamos a janela carregar&lt;/span&gt;
  $&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;form&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;addEvent&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;submit&amp;quot;&lt;/span&gt;, &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
    &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #006600;"&gt;upload&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;onComplete&amp;quot;&lt;/span&gt;: &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;response&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #000066;"&gt;alert&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;response&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
  &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Se quiser ver um exemplo funcionando ou fazer download do script, veja &lt;a href="http://juliogreff.blog.br/scripts/async-upload/" title="Async Upload - Upload Ass�ncrono de Arquivos"&gt;Async Upload - Upload Assíncrono de Arquivos&lt;/a&gt;. E espero que eu tenha conseguido mostrar que há vida além de jQuery&amp;#8230; Até mais!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hXVQI18djOytq27iCZiV22fpDt4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hXVQI18djOytq27iCZiV22fpDt4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hXVQI18djOytq27iCZiV22fpDt4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hXVQI18djOytq27iCZiV22fpDt4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/upload-assincrono-de-arquivos-com-mootools/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Eduardo Ottaviani</name>
						<uri>http://javiani.wordpress.com</uri>
					</author>
		<title type="html"><![CDATA[Mais importante que saber, é saber O QUE procurar.]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/qwIXlpj6_To/" />
		<id>http://clientside.com.br/mais-importante-que-saber-e-saber-o-que-procurar/</id>
		<updated>2008-02-06T14:05:39Z</updated>
		<published>2008-02-06T14:05:39Z</published>
		<category scheme="http://clientside.com.br" term="Boas práticas" /><category scheme="http://clientside.com.br" term="Básico" /><category scheme="http://clientside.com.br" term="Javascript" /><category scheme="http://clientside.com.br" term="Algoritmos" /><category scheme="http://clientside.com.br" term="Árvores" /><category scheme="http://clientside.com.br" term="Estrutura de Dados" /><category scheme="http://clientside.com.br" term="Pilhas" />		<summary type="html"><![CDATA[Olá, achei muito interessante a idéia desse blog e me cadastrei porque queria dar alguma contribuição. Estou aqui pra falar sobre técnicas de programação em Javascript, já que eu gosto mais da parte algorítmica da coisa. Não sou fã de frameworks e ainda que eu use para facilitar e agilizar meu trabalho não é minha [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/mais-importante-que-saber-e-saber-o-que-procurar/">&lt;p&gt;Olá, achei muito interessante a idéia desse blog e me cadastrei porque queria dar alguma contribuição. Estou aqui pra falar sobre técnicas de programação em Javascript, já que eu gosto mais da parte algorítmica da coisa. Não sou fã de frameworks e ainda que eu use para facilitar e agilizar meu trabalho não é minha paixão.&lt;/p&gt;
&lt;p&gt;Eu precisava de uma função que pegasse elementos pela classe e vi várias implementações de &amp;#8220;getElementsByClassName&amp;#8221;, mas queria aprender como fazer e fazer da minha forma.&lt;/p&gt;
&lt;p&gt;Pensei, pensei, pensei, testei, testei, pensei&amp;#8230;NADA! Tinha muito erro de lógica, cada vez que eu consertava criava um problema novo. Precisava procurar um algoritmo que resolvesse esse problema, pra isso tive que aprender um conceito novo (para mim) uma estrutura de dados chamada &lt;strong&gt;Árvores&lt;/strong&gt;.&lt;br /&gt;
Afinal de contas a estrutura do HTML não é a de uma árvore?&lt;/p&gt;
&lt;p&gt;Aprendi no &lt;a href="http://pt.wikipedia.org/wiki/%C3%81rvore_(estrutura_de_dados)"&gt;Wikipédia o algoritmo&lt;/a&gt;,  peguei o primeiro código recursivo que tinha em &amp;#8220;C&amp;#8221; lá e implementei em Javascript. Vergonhoso, a solução tinha 7 linhas. Ok, mas a recursão para funcionar empilha os dados, sabendo disso era só implementar uma &lt;strong&gt;Pilha&lt;/strong&gt; (isso eu sabia o que era) para fazer a versão iterativa da travessia da árvore em pré-ordem (filhos são processados após o pai):&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; getEBA&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;no, classe&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
  &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; retorno=&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
  &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; pilha=&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
  pilha&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;pilha.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;=no
&amp;nbsp;
  &lt;span style="color: #009900; font-style: italic;"&gt;//Enquanto a pilha contiver elementos...&lt;/span&gt;
  &lt;span style="color: #000066; font-weight: bold;"&gt;while&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;pilha.&lt;span style="color: #006600;"&gt;length&lt;/span&gt; &amp;amp;gt; &lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    &lt;span style="color: #009900; font-style: italic;"&gt;// Guardo o primeiro elemento da pilha em &amp;quot;no&amp;quot;&lt;/span&gt;
    no=pilha&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;pilha.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;-1&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
      &lt;span style="color: #009900; font-style: italic;"&gt;// Se o nodo tiver classe e for a que eu procuro,&lt;/span&gt;
      &lt;span style="color: #009900; font-style: italic;"&gt;// empilho o elemento no array de retorno.&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;typeof&lt;/span&gt; no.&lt;span style="color: #006600;"&gt;className&lt;/span&gt;!=”undefined” &amp;amp;amp;&amp;amp;amp; no.&lt;span style="color: #006600;"&gt;className&lt;/span&gt;==classe&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
      retorno&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;retorno.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;=no
&amp;nbsp;
    &lt;span style="color: #009900; font-style: italic;"&gt;// Desempilho o nó atual da pilha.&lt;/span&gt;
    pilha.&lt;span style="color: #006600;"&gt;pop&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;
      &lt;span style="color: #009900; font-style: italic;"&gt;// Se o nó atual tiver filhos, empilho os filhos na pilha[]&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;no.&lt;span style="color: #006600;"&gt;childNodes&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
        &lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; x &lt;span style="color: #000066; font-weight: bold;"&gt;in&lt;/span&gt; no.&lt;span style="color: #006600;"&gt;childNodes&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
        pilha&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;pilha.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;=no.&lt;span style="color: #006600;"&gt;childNodes&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;x&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; retorno
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Mas o algoritmo tinha limitações como os outros que tinha visto. Eu não poderia escolher uma condição&amp;#8230; a função só funcionaria para classes. E se eu quisesse usar um dia a função para pegar elementos pelo atributo &amp;#8220;type&amp;#8221; ou &amp;#8220;language&amp;#8221; ou qualquer outro? A função precisaria ser mais genérica. Outro problema.&lt;/p&gt;
&lt;p&gt;Solução? Usar um pouquinho de &lt;a href="http://eloquentjavascript.net/chapter6.html"&gt;Programação Funcional&lt;/a&gt;:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;12
13
14
15
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;      &lt;span style="color: #009900; font-style: italic;"&gt;// Se o nodo tiver classe e for a que eu procuro,&lt;/span&gt;
      &lt;span style="color: #009900; font-style: italic;"&gt;// empilho o elemento no array de retorno.&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;fn&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;no&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;  &lt;span style="color: #009900; font-style: italic;"&gt;// A condição é definida pela função.&lt;/span&gt;
      retorno&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;retorno.&lt;span style="color: #006600;"&gt;length&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;=no&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A condição então não é mais fixa, ela é definida por uma outra função passada como argumento na função principal e esse não será mais &amp;#8220;classe&amp;#8221; e sim &amp;#8220;fn&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Então, se quisesse pegar os elementos do div &amp;#8220;divPai&amp;#8221; que tenham apenas uma classe chamada &amp;#8220;h-card&amp;#8221;:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;17
18
19
20
21
22
23
24
25
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; classes=getEBA&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;
  document.&lt;span style="color: #006600;"&gt;getElementById&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;divPai&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;,
    &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;obj&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;typeof&lt;/span&gt; obj.&lt;span style="color: #006600;"&gt;className&lt;/span&gt;!=&lt;span style="color: #3366CC;"&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt; &amp;amp;amp;&amp;amp;amp;
      obj.&lt;span style="color: #006600;"&gt;className&lt;/span&gt;==&lt;span style="color: #3366CC;"&gt;&amp;quot;h-card&amp;quot;&lt;/span&gt;
      &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Agora sim. Nesta minha &amp;#8220;busca algorítimica&amp;#8221; implementei 4 conceitos muito interessantes que não havia dado muita atenção: &lt;strong&gt;Pilhas&lt;/strong&gt;, &lt;strong&gt;Árvores&lt;/strong&gt;, &lt;strong&gt;Programação Funcional&lt;/strong&gt; e até &lt;strong&gt;Expressões Regulares&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Expressões Regulares? Sim, se eu quisesse pegar elementos que tenham &amp;#8220;ieHOVER&amp;#8221; sendo que esses elementos poderiam ter mais de uma classe:&lt;/p&gt;

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;27
28
29
30
31
32
33
34
35
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; ieHover=getEBA&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;
  document.&lt;span style="color: #006600;"&gt;getElementById&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;divPai&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;,
    &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;obj&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;
      &lt;span style="color: #000066; font-weight: bold;"&gt;typeof&lt;/span&gt; obj.&lt;span style="color: #006600;"&gt;className&lt;/span&gt;!=&lt;span style="color: #3366CC;"&gt;&amp;quot;undefined&amp;quot;&lt;/span&gt; &amp;amp;amp;&amp;amp;amp;
      obj.&lt;span style="color: #006600;"&gt;className&lt;/span&gt;.&lt;span style="color: #006600;"&gt;match&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0066FF;"&gt;/ieHOVER/&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
      &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
    &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Não chamo de &amp;#8220;getElementsByClassName&amp;#8221;, chamo de &amp;#8220;getElementsByAnything&amp;#8221;, o getEBA =). Se for interessante para você, pode executar a tarefa nos nodos usando a função passada como argumento ao invés de fazer isso percorrendo o array retornado, que agora é uma mera opção. =P&lt;/p&gt;
&lt;p&gt;Mas minha intenção não era o código em si mas mostrar alguns dos obstáculos inevitáveis que surgem durante o processo de desenvolvimento e como contorná-los diminuindo &lt;strong&gt;drásticamente&lt;/strong&gt; sua dificuldade.&lt;/p&gt;
&lt;p&gt;É importante conhecer as diversas técnicas de programação e mais importante que conhecê-las é saber identificar a natureza do seu problema para só então procurar a solução e botar a mão na massa. Já pensaram nas coisas complicadas, para que perder tempo pensando do zero tudo de novo???&lt;/p&gt;
&lt;p&gt;Bom, é isso&amp;#8230; desculpem ficou longo o post, to engatinhando ainda e é meu primeiro post em blog (se for aceito).&lt;/p&gt;
&lt;p&gt;Comentem, sugestões e críticas construtivas são bem-vindas. Você tem uma idéia melhor? Me ensina!&lt;/p&gt;
&lt;p&gt;Ah&amp;#8230;a frase do título foi inspirada numa citação de &lt;strong&gt;Albert Einstein&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Abraços e ótimo 2008 para todos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8tzDPpNEtGFZLGLtJeSIcSnUBGo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8tzDPpNEtGFZLGLtJeSIcSnUBGo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8tzDPpNEtGFZLGLtJeSIcSnUBGo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8tzDPpNEtGFZLGLtJeSIcSnUBGo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/mais-importante-que-saber-e-saber-o-que-procurar/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Leandro Facchinetti</name>
						<uri>http://leandro.paralelo22.com.br</uri>
					</author>
		<title type="html"><![CDATA[Colocando um mapa dentro do site com JQuery e JMap2]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/VHHIXqUghcw/" />
		<id>http://clientside.com.br/colocando-um-mapa-dentro-do-site-com-jquery-e-jmap2/</id>
		<updated>2008-01-24T10:52:39Z</updated>
		<published>2008-01-29T11:51:03Z</published>
		<category scheme="http://clientside.com.br" term="Ajax" /><category scheme="http://clientside.com.br" term="jQuery" /><category scheme="http://clientside.com.br" term="Javascript" /><category scheme="http://clientside.com.br" term="jmap2" /><category scheme="http://clientside.com.br" term="mapa" /><category scheme="http://clientside.com.br" term="programação" />		<summary type="html"><![CDATA[Publiquei esse texto no meu blog e, como  está dentro do tema do Client-side, resolvi tentar minha sorte em ser publicado aqui.
Li sobre JQuery pela primeira vez neste blog. Então quando fui iniciar um novo projeto, resolvi testá-lo. É realmente impressionante o que se consegue fazer com ele. Mostra que programar pode ser divertido [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/colocando-um-mapa-dentro-do-site-com-jquery-e-jmap2/">&lt;p&gt;&lt;img src="http://leandro.paralelo22.com.br/wp-content/uploads/2008/01/untitled-2.jpg" alt="Google maps dentro do site" align="right" hspace="5" /&gt;Publiquei esse texto no &lt;a href="http://leandro.paralelo22.com.br" title="Leandro Facchinetti"&gt;meu blog&lt;/a&gt; e, como  está dentro do tema do Client-side, resolvi tentar minha sorte em ser publicado aqui.&lt;/p&gt;
&lt;p&gt;Li sobre &lt;a href="http://jquery.com/"&gt;JQuery&lt;/a&gt; pela primeira vez neste blog. Então quando fui iniciar um novo projeto, resolvi testá-lo. É realmente impressionante o que se consegue fazer com ele. Mostra que programar pode ser divertido e simples.&lt;/p&gt;
&lt;p&gt;Há, ainda, a possibilidade de usar plugins para complementar as funcionalidades dele. O que é ótimo, o limite do que você consegue fazer é a sua imaginação.&lt;/p&gt;
&lt;p&gt;Infelizmente um problema em boa parte dos plugins é a documentação escassa. Tenho penado lendo comentários deixados dentro do código, e muitas vezes tendo que descobrir como usá-lo lendo o fonte. Talvez seja só azar, justamente nos plugins que usei isso acontece. O próprio JQuery é &lt;a href="http://visualjquery.com/1.1.2.html" rel="nofollow"&gt;bem documentado&lt;/a&gt;, por exemplo. Saberei melhor no futuro.&lt;/p&gt;
&lt;p&gt;No intuito de colaborar com os desenvolvedores e os interessados, eis um tutorial de como inserir um mapa do &lt;a href="http://maps.google.com" rel="nofollow"&gt;Google Maps&lt;/a&gt; no seu site (é o primeiro tutorial que faço, então o feedback será muito bem vindo. Com o tempo eu pego o jeito &lt;img src='http://clientside.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /&gt; ):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O efeito final é &lt;a href="http://leandro.paralelo22.com.br/wp-content/uploads/tutorial/ajaxMaps/"&gt;esse&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Antes de começar é preciso criar uma chave para a API do Google Maps. Não é necessário cadastro, basta colocar a url do site no qual ela será usada &lt;a href="http://code.google.com/apis/maps/signup.html" rel="nofollow"&gt;nessa página&lt;/a&gt;. Ela serve para todo o domínio, inclusive subpastas. Se você tentar usar uma chave que não foi feita para o seu domínio ela não funcionará.&lt;/li&gt;
&lt;li&gt;Scripts necessários: são dois, o &lt;a href="http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.2.min.js" rel="nofollow"&gt;JQuery&lt;/a&gt; e o &lt;a href="http://leandro.paralelo22.com.br/wp-content/uploads/tutorial/ajaxMaps/jquery.jmap2.js"&gt;JMap2&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;O html: é preciso que o navegador esteja com o javascript habilitado para que o Google Maps funcione, então o html do exemplo é apenas a tag body:

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="xml"&gt;&lt;span style="color: #00bbdd;"&gt;&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;html&lt;/span&gt; &lt;span style="color: #000066;"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;head&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;meta&lt;/span&gt; &lt;span style="color: #000066;"&gt;http-equiv&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;content-type&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;content&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;text/html; charset=UTF-8&amp;quot;&lt;/span&gt; &lt;span style="font-weight: bold; color: black;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;meta&lt;/span&gt; &lt;span style="color: #000066;"&gt;name&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;author&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;content&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;Leandro Facchinetti&amp;quot;&lt;/span&gt; &lt;span style="font-weight: bold; color: black;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;script&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;src&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;jquery-1.2.2.min.js&amp;quot;&lt;/span&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/script&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;script&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;src&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;http://maps.google.com/maps?file=api&amp;amp;amp;v=2&amp;amp;amp;key=sua_chave&amp;quot;&lt;/span&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/script&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;script&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color: #000066;"&gt;src&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;jquery.jmap2.js&amp;quot;&lt;/span&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/script&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;script&lt;/span&gt; &lt;span style="color: #000066;"&gt;type&lt;/span&gt;=&lt;span style="color: #ff0000;"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="color: #808080; font-style: italic;"&gt;&amp;lt;!--
//o código virá aqui
--&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/script&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;title&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Exemplo de colocação de mapas dentro do site com JQuery e JMap2&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/title&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/head&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;body&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/body&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="color: #009900;"&gt;&lt;span style="font-weight: bold; color: black;"&gt;&amp;lt;/html&lt;span style="font-weight: bold; color: black;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Atente para as importações de scripts. São três, o JQuery, a API do Google Maps e o JMap2. Lembre-se de mudar para a sua chave da API, onde diz &amp;#8220;sua_chave&amp;#8221; no código.&lt;/li&gt;
&lt;li&gt;Na parte onde está escrito &amp;#8220;//o código virá aqui&amp;#8221; é que escreveremos nosso código. Logicamente é preferível que você faça isso num documento externo e o importe, estou fazendo assim para simplificar.&lt;/li&gt;
&lt;li&gt;O código a ser inserido é este, veja os comentários para entendê-lo:

&lt;div class="wp_syntax"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="line_numbers"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre class="javascript"&gt;$&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;//sintaxe do JQuery para a função ser executada quando o DOM estiver pronto&lt;/span&gt;
$&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;body&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;append&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;&amp;amp;lt;a href=&lt;span style="color: #000099; font-weight: bold;"&gt;\&amp;quot;&lt;/span&gt;&lt;span style="color: #000099; font-weight: bold;"&gt;\&amp;quot;&lt;/span&gt;&amp;amp;gt;Clique aqui para ver no mapa&amp;amp;lt;/a&amp;amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;children&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;click&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;//aqui é colocado o link, não faria sentido colocá-lo no html porque quem não tivesse javascript ficaria com um link vazio. Após a colocação do link é associada uma função a ser executada quando ele é clicado&lt;/span&gt;
$&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;after&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;&amp;amp;lt;div id=&lt;span style="color: #000099; font-weight: bold;"&gt;\&amp;quot;&lt;/span&gt;mapa&lt;span style="color: #000099; font-weight: bold;"&gt;\&amp;quot;&lt;/span&gt; style=&lt;span style="color: #000099; font-weight: bold;"&gt;\&amp;quot;&lt;/span&gt;width:450px; height:320px; display:none; background-color:#e5e3df; &lt;span style="color: #000099; font-weight: bold;"&gt;\&amp;quot;&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;parent&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;children&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;div#mapa&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;slideDown&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;slow&amp;quot;&lt;/span&gt;, &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;//é inserida uma div na qual irá o mapa. Atente para a colocação de atributos width e height, o mapa será do tamanho que você setar aqui. Depois da colocação vem a função do efeito que faz a div aparecer deslizando. Lógico que isso é opcional, fiz assim porque é mais estético&lt;/span&gt;
$&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;jmap&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;//aqui é acolocação do mapa em si, dentro dessa função vai um objeto com as opções, não listarei todas, só as que julgo serem mais importantes&lt;/span&gt;
mapCenter: &lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;-27.608000&lt;/span&gt;, &lt;span style="color: #CC0000;"&gt;-48.53770&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;,&lt;span style="color: #009900; font-style: italic;"&gt;//as coordenadas da onde o mapa será aberto. Para descobrí-las entre no Google Maps, ache a região que lhe interessa e clique em &amp;quot;Criar link para esta página&amp;quot;, observe a url gerada, procure por duas sequência de número logo no início, são elas que você deve colocar aqui&lt;/span&gt;
mapZoom: &lt;span style="color: #CC0000;"&gt;17&lt;/span&gt;,&lt;span style="color: #009900; font-style: italic;"&gt;//nível de zoom do mapa quando aberto&lt;/span&gt;
mapShowOverview: &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;,&lt;span style="color: #009900; font-style: italic;"&gt;//mostrar pequeno mapa da região no canto inferior direito&lt;/span&gt;
mapShowType: &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;//mostrar o tipo de mapa: mapa, satélite, terreno&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #006600;"&gt;addMarker&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #009900; font-style: italic;"&gt;//adicionar aquele marcador vermelho&lt;/span&gt;
pointLat: &lt;span style="color: #CC0000;"&gt;-27.608450&lt;/span&gt;,&lt;span style="color: #009900; font-style: italic;"&gt;//as coordenadas de onde o marcador deve ser criado&lt;/span&gt;
pointLng: &lt;span style="color: #CC0000;"&gt;-48.53770&lt;/span&gt;,
pointHTML: &lt;span style="color: #3366CC;"&gt;&amp;quot;&amp;amp;lt;h3&amp;amp;gt;Paralelo 22&amp;amp;lt;/h3&amp;amp;gt;&amp;amp;lt;p&amp;amp;gt;Praça Abdon Batista&amp;amp;lt;br /&amp;amp;gt;Saco dos Limões - Florianópolis - SC&amp;amp;lt;/p&amp;amp;gt;&amp;quot;&lt;/span&gt;,&lt;span style="color: #009900; font-style: italic;"&gt;//html a ser exibido no balão do marcador, é possível manipular a formatação desse html pelo css da página. Incrível, não?        openHTMLEvent: &amp;quot;mouseover&amp;quot;//evento que dispara a abertura do marcador&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;;&lt;span style="color: #009900; font-style: italic;"&gt;//impedir a ação padrão do link&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;Pronto, não é fantástico o que pode ser feito com tão pouco código?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hhNgocb_3xEiBSSQCfgg7DvRWJc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hhNgocb_3xEiBSSQCfgg7DvRWJc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hhNgocb_3xEiBSSQCfgg7DvRWJc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hhNgocb_3xEiBSSQCfgg7DvRWJc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/colocando-um-mapa-dentro-do-site-com-jquery-e-jmap2/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>elcio</name>
						<uri>http://blog.elcio.com.br</uri>
					</author>
		<title type="html"><![CDATA[As sete regras do javascript não obstrutivo.]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/client-side/~3/-JaKxqhtAJc/" />
		<id>http://clientside.com.br/as-sete-regras-do-javascript-nao-obstrutivo/</id>
		<updated>2008-01-15T13:41:33Z</updated>
		<published>2008-01-24T13:40:12Z</published>
		<category scheme="http://clientside.com.br" term="Boas práticas" /><category scheme="http://clientside.com.br" term="Javascript" /><category scheme="http://clientside.com.br" term="Link" />		<summary type="html"><![CDATA[Estava pondo em dia as leituras que ficaram pendentes no Google Reader desde o ano passado e encontrei, no 456 Berea Street, o link para este artigo do Christian Heilmann:
The seven rules of Unobtrusive JavaScript
Um resumo:

Não assuma nada: não espera que o javascript esteja sempre ligado, não espera que o markup desejado estará lá;
Encontre seus [...]]]></summary>
		<content type="html" xml:base="http://clientside.com.br/as-sete-regras-do-javascript-nao-obstrutivo/">&lt;p&gt;Estava pondo em dia as leituras que ficaram pendentes no Google Reader desde o ano passado e encontrei, no &lt;a href="http://www.456bereastreet.com/archive/200711/the_rules_of_unobtrusive_javascript/"&gt;456 Berea Street&lt;/a&gt;, o link para este artigo do Christian Heilmann:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://icant.co.uk/articles/seven-rules-of-unobtrusive-javascript/"&gt;The seven rules of Unobtrusive JavaScript&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Um resumo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Não assuma nada&lt;/strong&gt;: não espera que o javascript esteja sempre ligado, não espera que o markup desejado estará lá;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encontre seus ganchos e relacionamentos&lt;/strong&gt;: examine o HTML com o qual você vai trabalhar para encontrar a melhora maneira de fazer seu script interagir com o markup;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deixe a travessia para os experts&lt;/strong&gt;: Quando possível, deixe o CSS cuidar de encontrar o elemento que você quer mudar;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entenda os navegadores e usuários&lt;/strong&gt;: não se desvie muito da maneira como os navegadores funcionam e da maneira como os usuários esperam que eles funcionem;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entenda eventos&lt;/strong&gt;: aprenda como o tratamento de eventos ajuda você a separar seu javascript de seu HTML;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jogue bem com os outros&lt;/strong&gt;: Assegure-se de que seu script não interefere em outros, e faça com que seja difícil que outros scripts interfiram no seu;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trabalhe para o próximo desenvolvedor&lt;/strong&gt;: Torne a manutenção fácil escrevendo código lógico com nomes de função e variáveis claros, e comentando quando necessário.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fantástico. Alguém arrisca uma tradução do artigo inteiro?&lt;/p&gt;

&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/94QJ2yeVmUZD4UjM5iwhsAcG_WA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/94QJ2yeVmUZD4UjM5iwhsAcG_WA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/94QJ2yeVmUZD4UjM5iwhsAcG_WA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/94QJ2yeVmUZD4UjM5iwhsAcG_WA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content>
	<feedburner:origLink>http://clientside.com.br/as-sete-regras-do-javascript-nao-obstrutivo/</feedburner:origLink></entry>
	</feed>
