<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Debugando.com &#187; Ajax</title>
	<atom:link href="http://www.debugando.com/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.debugando.com</link>
	<description>Noticias, dicas e tutorias do mundo da Tecnologia.</description>
	<lastBuildDate>Thu, 01 Dec 2011 23:44:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Barra de Progresso com AJAX</title>
		<link>http://www.debugando.com/barra-de-progresso-com-ajax/</link>
		<comments>http://www.debugando.com/barra-de-progresso-com-ajax/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 18:59:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=581</guid>
		<description><![CDATA[



Uma das necessidades com que nos deparamos na hora de realizar projetos longos na web é indicar ao  usuário o quanto é preciso esperar. Às vezes é bastante complicado criar uma barra de progresso que mostre o estado atual do processo que está sendo executado.
Uma forma de realizar essa tarefa é usando AJAX. Fazemos [...]]]></description>
			<content:encoded><![CDATA[<div id="strConteudo">
<p>Uma das necessidades com que nos deparamos na hora de realizar projetos longos na web é indicar ao  usuário o quanto é preciso esperar. Às vezes é bastante complicado criar uma barra de progresso que mostre o estado atual do processo que está sendo executado.</p>
<p>Uma forma de realizar essa tarefa é usando AJAX. Fazemos uma chamada AJAX que executa a ação, e quando o objeto AJAX tem o estado LOADING (readyState == 3), podemos obter a resposta do script chamado e passá-lo para mostrar o percentual da ação que está sendo realizada.</p>
<p>Para isso, desenvolveremos um script (res. php, por exemplo) que devolva a porcentagem seguida por um hífen. Por exemplo, quando passar por 1% será retornado pelo script &#8220;1-&#8221;, quando passar por 5% será retornado &#8220;1-2-3-4-5&#8243;. Processando isso podemos saber, através do último número, o percentual já processado.</p>
<p>O PHP seria o seguinte:</p>
<div class="codigo">
<pre><em><code><span class="kwd">for</span><span class="pun">(</span><span class="pln">$i</span><span class="pun">=</span><span class="lit">0</span><span class="pun">;</span><span class="pln"> $i</span><span class="pun">&lt;</span><span class="lit">10000000</span><span class="pun">;</span><span class="pln"> $i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">  if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">$i</span><span class="pun">%</span><span class="lit">10000</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> echo </span><span class="pun">((</span><span class="kwd">int</span><span class="pun">)</span><span class="pln"> $i</span><span class="pun">/</span><span class="lit">100000</span><span class="pun">)</span><span class="pln">.</span><span class="str">'-'</span><span class="pun">;</span><span class="pln">
  flush</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span></code></em></pre>
</div>
<p>E o JavaScript seria assim:</p>
<div class="codigo">
<pre><code><em><span class="kwd">function</span><span class="pln"> ajaxobj</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
</span><span class="kwd">  try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
    _ajaxobj </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ActiveXObject</span><span class="pun">(</span><span class="str">"Msxml2.XMLHTTP"</span><span class="pun">);</span><span class="pln">  
</span><span class="pun">  }</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="pln">e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
</span><span class="kwd">  try</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
    _ajaxobj </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">ActiveXObject</span><span class="pun">(</span><span class="str">"Microsoft.XMLHTTP"</span><span class="pun">);</span><span class="pln">  
</span><span class="pun">  }</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="pln">E</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
    _ajaxobj </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">;</span><span class="pln">  
</span><span class="pun">  }</span><span class="pln">  
</span><span class="pun">}</span><span class="pln">  

 </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">_ajaxobj </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="kwd">typeof</span><span class="pln"> </span><span class="typ">XMLHttpRequest</span><span class="pun">!=</span><span class="str">'undefined'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
   _ajaxobj </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">XMLHttpRequest</span><span class="pun">();</span><span class="pln">  
</span><span class="pun"> }</span><span class="pln">  

</span><span class="kwd"> return</span><span class="pln"> _ajaxobj</span><span class="pun">;</span></em><span class="pln"><em> </em> 
</span><span class="pun">}</span><span class="pln">
</span><em><span class="kwd">function</span><span class="pln"> prueba </span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
  ajax </span><span class="pun">=</span><span class="pln"> ajaxobj</span><span class="pun">();</span><span class="pln">  
  ajax</span><span class="pun">.</span><span class="pln">open</span><span class="pun">(</span><span class="str">"GET"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"res.php"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">);</span><span class="pln">  
  ajax</span><span class="pun">.</span><span class="pln">onreadystatechange</span><span class="pun">=</span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">  if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">ajax</span><span class="pun">.</span><span class="pln">readyState </span><span class="pun">==</span><span class="pln"> </span><span class="lit">3</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  

</span><span class="com">   // Mostramos o percentual </span><span class="pln">
</span><span class="kwd">   var</span><span class="pln"> res </span><span class="pun">=</span><span class="pln"> ajax</span><span class="pun">.</span><span class="pln">responseText</span><span class="pun">;</span><span class="pln">
   res </span><span class="pun">=</span><span class="pln"> res</span><span class="pun">.</span><span class="pln">split</span><span class="pun">(</span><span class="str">'-'</span><span class="pun">);</span><span class="pln">  
   alert</span><span class="pun">(</span><span class="pln">res</span><span class="pun">[</span><span class="pln">res</span><span class="pun">.</span><span class="pln">length</span><span class="pun">-</span><span class="lit">2</span><span class="pun">]);</span><span class="pln">  
</span><span class="pun">  }</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">ajax</span><span class="pun">.</span><span class="pln">readyState </span><span class="pun">==</span><span class="pln"> </span><span class="lit">4</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  

</span><span class="com">  // Fim</span><span class="pln">
  alert</span><span class="pun">(</span><span class="str">'FIM'</span><span class="pun">);</span><span class="pln">  
</span><span class="pun"> }</span><span class="pln">  
</span><span class="pun">}</span><span class="pln">  

</span><span class="com"> // Enviamos algo para que o processo funcione</span><span class="pln">
 ajax</span><span class="pun">.</span><span class="pln">send</span><span class="pun">(</span><span class="kwd">null</span><span class="pun">);</span><span class="pln">  
</span><span class="pun">}</span><span class="pln">  </span></em></code></pre>
</div>
<p>Como não existe nada perfeito, e menos ainda o Internet Explorer, esse script só funcionou no Firefox, Opera, Safari e Chrome.</p>
<p><img src="http://www.pplware.com/wp-content/images/ico_04.jpg" alt="" width="32" height="35" />Fonte: <a href="http://imasters.uol.com.br/artigo/12615/ajax/barra_de_progresso_com_ajax/" target="_blank">Imasters</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/barra-de-progresso-com-ajax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery e ASP para cadastrar dados</title>
		<link>http://www.debugando.com/jquery-e-asp-para-cadastrar-dados/</link>
		<comments>http://www.debugando.com/jquery-e-asp-para-cadastrar-dados/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 22:04:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=554</guid>
		<description><![CDATA[Usar o jQuery é uma forma mais fácil de criar funcionalidades extras em seus sistemas, de animações básicas a grandes galerias de fotos, mas vamos para o nosso foco que é inserir no banco.
Criei um arquivo chamado funcao_jquery.js para colocar a função de efeito do jQuery. Para nossa aplicação usei o efeito fadeIn().
O Fade in [...]]]></description>
			<content:encoded><![CDATA[<p>Usar o jQuery é uma forma mais fácil de criar funcionalidades extras em seus sistemas, de animações básicas a grandes galerias de fotos, mas vamos para o nosso foco que é inserir no banco.</p>
<p>Criei um arquivo chamado funcao_jquery.js para colocar a função de efeito do jQuery. Para nossa aplicação usei o efeito fadeIn().</p>
<p>O <strong>Fade in</strong> (a função fadeIn()) serve para dar opacidade, e pode ser ajustado para ter animação. Existem três strings de velocidade predefinidas (&#8220;slow&#8221;, &#8220;def&#8221;, e &#8220;fast&#8221;), usei a slow em nossa aplicação;</p>
<p><em><kbd>fadeIn("slow");</kbd></em></p>
<p>Criei dois campos de exemplo (Nome e E-Mail) e um botão &#8220;<strong>submit</strong>&#8220;. Podem ser criados quantos necessários:</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;</span><span class="tag">form</span><span class="pln"> </span><span class="atn">action</span><span class="pun">=</span><span class="atv">"Cadastro_JQuery.asp?Cadastrar=Ok"</span><span class="pln"> </span><span class="atn">method</span><span class="pun">=</span><span class="atv">"post"</span><span class="pun">&gt;</span><span class="pln">
    Nome: </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"Nome"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"Nome"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">br</span><span class="pun">&gt;</span><span class="pln">
    E-Mail: </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"EMail"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"EMail"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
    </span><span class="pun">&lt;</span><span class="tag">input</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"btAdd"</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"submit"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"Adicionar"</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"btn_enviar"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">form</span><span class="pun">&gt;</span></code></em></pre>
</div>
<p>No <strong>action </strong>do formulário coloquei uma <strong>Query &#8220;Cadastrar&#8221;</strong> com valor ok para ativar a ação do ASP (usando JScript) que segue abaixo:</p>
<div class="codigo">
<pre><code><span class="pln">
</span><em><span class="pun">&lt;%</span><span class="pln">
</span><span class="com">// Função para cadastrar no banco</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Request</span><span class="pun">.</span><span class="typ">QueryString</span><span class="pun">(</span><span class="str">"Cadastrar"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="str">"Ok"</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

    </span><span class="kwd">var</span><span class="pln"> nome </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Request</span><span class="pun">.</span><span class="typ">Form</span><span class="pun">(</span><span class="str">"Nome"</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> email </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Request</span><span class="pun">.</span><span class="typ">Form</span><span class="pun">(</span><span class="str">"EMail"</span><span class="pun">);</span><span class="pln">

    </span><span class="typ">Conexao</span><span class="pun">.</span><span class="typ">Execute</span><span class="pun">(</span><span class="str">"Insert Into Newsletter (Nome, EMail)
                     Values ('"</span><span class="pun">+</span><span class="pln">nome</span><span class="pun">+</span><span class="str">"', '"</span><span class="pun">+</span><span class="pln">email</span><span class="pun">+</span><span class="str">"')"</span><span class="pun">);</span><span class="pln">
    </span><span class="typ">Response</span><span class="pun">.</span><span class="typ">Write</span><span class="pun">(</span><span class="str">""</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
%&gt;</span></em></code></pre>
</div>
<p>Usando listas (UL&gt;LI) eu pego as informações do banco e organizo tudo para ser mostrado ao usuário:</p>
<div class="codigo">
<pre><em><code><span class="pun">&lt;%</span><span class="pln">
</span><span class="kwd">var</span><span class="pln"> rs </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Conexao</span><span class="pun">.</span><span class="typ">Execute</span><span class="pun">(</span><span class="str">"Select * From Teste"</span><span class="pun">);</span><span class="pln"> </span><span class="com">// SQL para listar os dados</span><span class="pln">
</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">rs </span><span class="pun">==</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="typ">Response</span><span class="pun">.</span><span class="typ">Write</span><span class="pun">(</span><span class="str">"NADA ENCONTRADO"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">rs</span><span class="pun">.</span><span class="pln">EOF</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="typ">Response</span><span class="pun">.</span><span class="typ">Write</span><span class="pun">(</span><span class="str">"&lt;li&gt;"</span><span class="pun">+</span><span class="pln">rs</span><span class="pun">(</span><span class="str">"Nome"</span><span class="pun">)+</span><span class="str">" : "</span><span class="pun">+</span><span class="pln">rs</span><span class="pun">(</span><span class="str">"EMail"</span><span class="pun">)+</span><span class="str">"&lt;/li&gt;"</span><span class="pun">)</span><span class="pln"> </span><span class="com">
        // Lista todos os cadastrados do banco</span><span class="pln">
    rs</span><span class="pun">.</span><span class="typ">MoveNext</span><span class="pun">();</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
%&gt;</span></code></em></pre>
</div>
<p>No ASP, com JScript para verificar se existe algo no banco, eu pego o <strong>RecordSet</strong> e comparo ele com <strong>&#8220;null&#8221;</strong> e o <strong>&#8220;else&#8221;</strong> caso encontre;</p>
<p><em><kbd>if (rs == null) {</kbd></em></p>
<p><em><em>&#8230; continua o resto do código&#8230;</em></em></p>
<p>A mesma idéia temos para o &#8220;loop&#8221;, só que uso o <em>End Of File</em> (.EOF)</p>
<p><em><kbd>while (!rs.EOF) {</kbd></em></p>
<p><em> &#8230; continua o resto do código &#8230; </em></p>
<p>Em seqüência imprimo na tela o que foi encontrado.</p>
<p>O jQuery vai agir da seguinte maneira:</p>
<p><em>No botão de tipo <strong>&#8220;submit&#8221;</strong> coloquei uma <strong>ID </strong>de nome <strong>&#8220;btn_enviar&#8221;</strong>, quando o botão for clicado será enviado os parâmetros via POST para o jQuery.</em></p>
<div class="codigo">
<pre><em><code><span class="pln">$</span><span class="pun">(</span><span class="str">'#btn_enviar'</span><span class="pun">).</span><span class="pln">click</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(){</span><span class="pln">

    </span><span class="kwd">var</span><span class="pln"> nome_post </span><span class="pun">=</span><span class="pln"> $</span><span class="pun">(</span><span class="str">'#Nome'</span><span class="pun">).</span><span class="pln">val</span><span class="pun">();</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> email_post </span><span class="pun">=</span><span class="pln"> $</span><span class="pun">(</span><span class="str">'#EMail'</span><span class="pun">).</span><span class="pln">val</span><span class="pun">();</span><span class="pln">

$</span><span class="pun">.</span><span class="pln">post</span><span class="pun">(</span><span class="str">"Cadastro_JQuery.asp?Cadastrar=Ok"</span><span class="pun">,{</span><span class="pln">nome</span><span class="pun">:</span><span class="pln"> nome_post</span><span class="pun">,</span><span class="pln"> email</span><span class="pun">:</span><span class="pln"> email_post</span><span class="pun">}</span></code></em></pre>
</div>
<p>Logo em seguida jogo dentro da lista (UL&gt;LI).</p>
<div class="codigo">
<pre><em><code><span class="pln">$</span><span class="pun">(</span><span class="str">"ul li:last"</span><span class="pun">).</span><span class="pln">after</span><span class="pun">(</span><span class="str">"&lt;li&gt;"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> nome_post </span><span class="pun">+</span><span class="pln"> </span><span class="str">" : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> email_post </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;/li&gt;"</span><span class="pun">).</span><span class="kwd">next</span><span class="pun">().</span><span class="pln">fadeIn</span><span class="pun">(</span><span class="str">"slow"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">});</span></code></em></pre>
</div>
<p>E finalizo limpando os campos. Veja na imagem abaixo:</p>
<p><img src="http://conteudo.imasters.uol.com.br/11377/2008_11_19_usando-jquery-cadastro_02.gif" alt="" /></p>
<p>Segue o link da página com o código completo e o arquivo jQuery!</p>
<p><em><a class="ext" href="http://conteudo.imasters.uol.com.br/11377/jquery_asp_jscript.asp">Código completo</a></em></p>
<p><em><a class="ext" href="http://conteudo.imasters.uol.com.br/11377/jquery.js">Arquivo jQuery</a></em></p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/11377/asp/jquery_e_asp_para_cadastrar_dados/" target="_blank">Imasters</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/jquery-e-asp-para-cadastrar-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upper-box &#8211; Componente para jQuery</title>
		<link>http://www.debugando.com/upper-box-componente-para-jquery-2/</link>
		<comments>http://www.debugando.com/upper-box-componente-para-jquery-2/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 22:00:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=551</guid>
		<description><![CDATA[Para nós, desenvolvedores, existem scripts, códigos, métodos, estruturas que carregamos conosco ano após ano. Utilizamos essas soluções empacotadas em determinados momentos, muitas vezes salvando nossas horas de descanso.
Há muito tempo, em um sistema web em que o foco era a visualização de documentos, o cliente solicitou que o menu fosse retrátil. Ou seja, o menu [...]]]></description>
			<content:encoded><![CDATA[<p>Para nós, desenvolvedores, existem scripts, códigos, métodos, estruturas que carregamos conosco ano após ano. Utilizamos essas soluções empacotadas em determinados momentos, muitas vezes salvando nossas horas de descanso.</p>
<p>Há muito tempo, em um sistema web em que o foco era a visualização de documentos, o cliente solicitou que o menu fosse retrátil. Ou seja, o menu superior da aplicação tinha que desaparecer se não estivesse sendo utilizado e aparecer quando o cursor do mouse se aproximasse dele. Para suprir isso criei uma função Javascript (utilizando CSS), e ficou bem bacana, simples e bastante útil. Esse script eu carrego comigo desde lá.</p>
<p>Precisei disso novamente alguns dias atrás, mas dessa vez fiz diferente. Tornei o script genérico, de modo que posso utilizar mais facilmente em qualquer aplicação web que tenha <a class="ext" href="http://jquery.com/">jQuery</a>, e ainda coloquei em um <a class="ext" href="http://github.com/wagnerandrade/upper-box/tree/master">repositório no Github</a> (repositório <a class="ext" href="http://en.wikipedia.org/wiki/Git_%28software%29">GIT</a>).</p>
<p>Sei que ainda é bastante primitivo e <strong>não está nos padrões de plugin jQuery. Mas essa é uma das intenções de colocar em um repositório público</strong>. Quem quiser usar e acoplar funcionalidades, otimizações e mesmo dar opiniões será muito bem-vindo. Pra quem não quer nem tocar no repositório, segue o link pra <a class="ext" href="http://github.com/wagnerandrade/upper-box/zipball/master">download </a> (versão mais recente). Veja um exemplo do seu funcionamento <a class="ext" href="http://www.wagnerandrade.com/upper-box/example.html">aqui</a>.</p>
<p>Pra explicar o que, como, onde, vou transcrever o README do repositório no Github abaixo.</p>
<h4>upper-box</h4>
<p>API javascript que transforma qualquer elemento de seu HTML (uma div, por exemplo) em uma caixa móvel posicionada na parte de cima da tela.</p>
<p>Para utilizá-lo é necessário estar com o jQuery adicionado ao documento.</p>
<h4>O que acontece?</h4>
<p>O elemento upper-box vai virar uma caixa invisível na parte de cima da tela.</p>
<p>Quando o usuário se aproxima com o mouse da parte superior da tela (body), o elemento ira rolar, abrindo e exibindo seu conteúdo.</p>
<h4>Como usar?</h4>
<p>Primeiro inclua os arquivos jQuery e upper-box no seu html, desta forma:</p>
<div class="codigo">
<pre><code><span class="pun">&lt;</span><span class="tag">script</span><span class="pln"> </span><span class="atn">type</span><span class="pun">=</span><span class="atv">"text/javascript"</span><span class="pln"> </span><span class="atn">src</span><span class="pun">=</span><span class="atv">"jquery.js"</span><span class="pun">&gt;&lt;</span><span class="str">/script&gt;
&lt;script type="text/</span><span class="pln">javascript</span><span class="str">" src="</span><span class="pln">upper</span><span class="pun">-</span><span class="pln">box</span><span class="pun">.</span><span class="pln">js</span><span class="str">"&gt;</span><span class="pun">&lt;/</span><span class="tag">script</span><span class="pun">&gt;</span></code></pre>
</div>
<p>Seu uso é bem simples, basta adicionar upper-box ao class do elemento que vai virar upper-box.</p>
<p>Exemplo:</p>
<div class="codigo">
<pre><code><span class="pun">&lt;</span><span class="tag">div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'div1'</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'divClass'</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;</span><span class="tag">h2</span><span class="pun">&gt;</span><span class="pln">Olá,</span><span class="pun">&lt;/</span><span class="tag">h2</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;</span><span class="tag">p</span><span class="pun">&gt;</span><span class="pln">Esta div não é um </span><span class="pun">&lt;</span><span class="tag">b</span><span class="pun">&gt;</span><span class="pln">upper-box</span><span class="pun">&lt;/</span><span class="tag">b</span><span class="pun">&gt;</span><span class="pln">!</span><span class="pun">&lt;/</span><span class="tag">p</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">div</span><span class="pun">&gt;</span></code></pre>
</div>
<div class="codigo">
<pre><code><span class="pun">&lt;</span><span class="tag">div</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">'div2'</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">'divClass upper-box'</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;</span><span class="tag">p</span><span class="pun">&gt;</span><span class="pln">Esta div será um </span><span class="pun">&lt;</span><span class="tag">b</span><span class="pun">&gt;</span><span class="pln">upper-box</span><span class="pun">&lt;/</span><span class="tag">b</span><span class="pun">&gt;</span><span class="pln">!</span><span class="pun">&lt;/</span><span class="tag">p</span><span class="pun">&gt;</span><span class="pln">
 </span><span class="pun">&lt;</span><span class="tag">p</span><span class="pun">&gt;</span><span class="pln">Simples, não?!</span><span class="pun">&lt;/</span><span class="tag">p</span><span class="pun">&gt;</span><span class="pln">
</span><span class="pun">&lt;/</span><span class="tag">div</span><span class="pun">&gt;</span></code></pre>
</div>
<p>Espero não só ter ajudado como também ter instigado a colaboração de código. Sintam-se à vontade para realizar melhorias no simples &#8211; por enquanto &#8211; upper-box.</p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/11557/javascript/upper-box_-_componente_para_jquery/" target="_blank">Imasters</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/upper-box-componente-para-jquery-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validação de formulários com jQuery</title>
		<link>http://www.debugando.com/validacao-de-formularios-com-jquery/</link>
		<comments>http://www.debugando.com/validacao-de-formularios-com-jquery/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 21:45:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=543</guid>
		<description><![CDATA[Vamos verificar, por exemplo, se todos os campos foram preenchidos ou não.. ou se os seus valores estão ok.
Veja um exemplo do que será aprendido nessa aula.
Usarei como exemplo um formulário de contato que é o mais comum por aí. Vamos ao passo-a-passo:
Faça o download da última versão do jQuery no site: http://jquery.com/
Faça o download [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos verificar, por exemplo, se todos os campos foram preenchidos ou não.. ou se os seus valores estão ok.</p>
<p>Veja um <a class="ext" href="http://thiagobelem.net/blog/exemplo2/">exemplo</a> do que será aprendido nessa aula.</p>
<p>Usarei como exemplo um formulário de contato que é o mais comum por aí. Vamos ao passo-a-passo:</p>
<p>Faça o download da última versão do jQuery no site: <a class="ext" href="http://jquery.com/">http://jquery.com/</a></p>
<p>Faça o download do plugin Validation no site: <a class="ext" href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/">http://bassistance.de/jquery-plugins/jquery-plugin-validation/</a></p>
<p>Insira-os dentro do &lt;head&gt; do seu site, da seguinte forma:</p>
<div class="codigo">
<pre><em><code><span class="lit">1.</span><span class="pun">&lt;</span><span class="pln">script language</span><span class="pun">=</span><span class="str">"JavaScript"</span><span class="pln"> src</span><span class="pun">=</span><span class="str">"jquery.js"</span><span class="pln"> type</span><span class="pun">=</span><span class="str">"text/javascript"</span><span class="pun">&gt;&lt;</span><span class="str">/script&gt;
2.&lt;script language="JavaScript" src="jquery.validate.js" type="text/</span><span class="pln">javascript</span><span class="str">"&gt;&lt;/script&gt;</span></code></em></pre>
</div>
<p>Após isso, criamos um pequeno bloco de CSS para estilizar as mensagens de erro:</p>
<div class="codigo">
<pre><em><code><span class="lit">1.</span><span class="pun">*</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> font</span><span class="pun">-</span><span class="pln">family</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Verdana</span><span class="pun">;</span><span class="pln"> font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">96</span><span class="pun">%;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">2.label</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> display</span><span class="pun">:</span><span class="pln"> block</span><span class="pun">;</span><span class="pln"> margin</span><span class="pun">-</span><span class="pln">top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">3.label</span><span class="pun">.</span><span class="pln">error </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">float</span><span class="pun">:</span><span class="pln"> none</span><span class="pun">;</span><span class="pln"> color</span><span class="pun">:</span><span class="pln"> red</span><span class="pun">;</span><span class="pln"> margin</span><span class="pun">:</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">.5em</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> vertical</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> top</span><span class="pun">;</span><span class="pln"> font</span><span class="pun">-</span><span class="pln">size</span><span class="pun">:</span><span class="pln"> </span><span class="lit">10px</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">4.p</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> clear</span><span class="pun">:</span><span class="pln"> both</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">5.</span><span class="pun">.</span><span class="pln">submit </span><span class="pun">{</span><span class="pln"> margin</span><span class="pun">-</span><span class="pln">top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">
</span><span class="lit">6.em</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> font</span><span class="pun">-</span><span class="pln">weight</span><span class="pun">:</span><span class="pln"> bold</span><span class="pun">;</span><span class="pln"> padding</span><span class="pun">-</span><span class="pln">right</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1em</span><span class="pun">;</span><span class="pln"> vertical</span><span class="pun">-</span><span class="pln">align</span><span class="pun">:</span><span class="pln"> top</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></code></em></pre>
</div>
<p>Ainda dentro do head, depois de inserir o jQuery e o estilo das mensagens de erro, precisaremos adicionar um bloco de JavaScript contendo instruções para a validação:</p>
<div class="codigo">
<pre><em><code><span class="lit">01.</span><span class="pln">$</span><span class="pun">(</span><span class="pln">document</span><span class="pun">).</span><span class="pln">ready</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">function</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="lit">02.</span><span class="pln">$</span><span class="pun">(</span><span class="str">"#formularioContato"</span><span class="pun">).</span><span class="pln">validate</span><span class="pun">({</span><span class="pln">
</span><span class="lit">03.</span><span class="com">// Define as regras</span><span class="pln">
</span><span class="lit">04.rules</span><span class="pun">:{</span><span class="pln">
</span><span class="lit">05.campoNome</span><span class="pun">:{</span><span class="pln">
</span><span class="lit">06.</span><span class="com">// campoNome será obrigatório (required) e terá tamanho mínimo (minLength)</span><span class="pln">
</span><span class="lit">07.required</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> minlength</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
</span><span class="lit">08.</span><span class="pun">},</span><span class="pln">
</span><span class="lit">09.campoEmail</span><span class="pun">:{</span><span class="pln">
</span><span class="lit">10.</span><span class="com">// campoEmail será obrigatório (required) e precisará ser um e-mail válido (email)</span><span class="pln">
</span><span class="lit">11.required</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> email</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pln">
</span><span class="lit">12.</span><span class="pun">},</span><span class="pln">
</span><span class="lit">13.campoMensagem</span><span class="pun">:{</span><span class="pln">
</span><span class="lit">14.</span><span class="com">// campoMensagem será obrigatório (required) e terá tamanho mínimo (minLength)</span><span class="pln">
</span><span class="lit">15.required</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> minlength</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2</span><span class="pln">
</span><span class="lit">16.</span><span class="pun">}</span><span class="pln">
</span><span class="lit">17.</span><span class="pun">},</span><span class="pln">
</span><span class="lit">18.</span><span class="com">// Define as mensagens de erro para cada regra</span><span class="pln">
</span><span class="lit">19.messages</span><span class="pun">:{</span><span class="pln">
</span><span class="lit">20.campoNome</span><span class="pun">:{</span><span class="pln">
</span><span class="lit">21.required</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Digite o seu nome"</span><span class="pun">,</span><span class="pln">
</span><span class="lit">22.minLength</span><span class="pun">:</span><span class="pln"> </span><span class="str">"O seu nome deve conter, no mínimo, 2 caracteres"</span><span class="pln">
</span><span class="lit">23.</span><span class="pun">},</span><span class="pln">
</span><span class="lit">24.campoEmail</span><span class="pun">:{</span><span class="pln">
</span><span class="lit">25.required</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Digite o seu e-mail para contato"</span><span class="pun">,</span><span class="pln">
</span><span class="lit">26.email</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Digite um e-mail válido"</span><span class="pln">
</span><span class="lit">27.</span><span class="pun">},</span><span class="pln">
</span><span class="lit">28.campoMensagem</span><span class="pun">:{</span><span class="pln">
</span><span class="lit">29.required</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Digite a sua mensagem"</span><span class="pun">,</span><span class="pln">
</span><span class="lit">30.minLength</span><span class="pun">:</span><span class="pln"> </span><span class="str">"A sua mensagem deve conter, no mínimo, 2 caracteres"</span><span class="pln">
</span><span class="lit">31.</span><span class="pun">}</span><span class="pln">
</span><span class="lit">32.</span><span class="pun">}</span><span class="pln">
</span><span class="lit">33.</span><span class="pun">});</span><span class="pln">
</span><span class="lit">34.</span><span class="pun">});</span></code></em></pre>
</div>
<p>Por fim, inserimos o HTML do formulário na página:</p>
<div class="codigo">
<pre><em><code><span class="lit">01.</span><span class="pun">&lt;</span><span class="pln">form id</span><span class="pun">=</span><span class="str">"formularioContato"</span><span class="pln"> method</span><span class="pun">=</span><span class="str">"post"</span><span class="pln"> action</span><span class="pun">=</span><span class="str">""</span><span class="pun">&gt;</span><span class="pln">
</span><span class="lit">02.</span><span class="pun">&lt;</span><span class="pln">label</span><span class="pun">&gt;</span><span class="typ">Nome</span><span class="pun">&lt;</span><span class="str">/label&gt;
03.&lt;input name="campoNome" type="text" value="" /</span><span class="pun">&gt;</span><span class="pln">
</span><span class="lit">04.</span><span class="pln">
</span><span class="lit">05.</span><span class="pun">&lt;</span><span class="pln">label</span><span class="pun">&gt;</span><span class="pln">E</span><span class="pun">-</span><span class="pln">mail</span><span class="pun">&lt;</span><span class="str">/label&gt;
06.&lt;input name="campoEmail" type="text" value="" /</span><span class="pun">&gt;</span><span class="pln">
</span><span class="lit">07.</span><span class="pln">
</span><span class="lit">08.</span><span class="pun">&lt;</span><span class="pln">label</span><span class="pun">&gt;</span><span class="typ">Mensagem</span><span class="pun">&lt;</span><span class="str">/label&gt;
09.&lt;textarea name="campoMensagem"&gt;&lt;/</span><span class="pln">textarea</span><span class="pun">&gt;&lt;</span><span class="pln">br </span><span class="pun">/&gt;</span><span class="pln">
</span><span class="lit">10.</span><span class="pln">
</span><span class="lit">11.</span><span class="pun">&lt;</span><span class="pln">input type</span><span class="pun">=</span><span class="str">"submit"</span><span class="pln"> </span><span class="kwd">class</span><span class="pun">=</span><span class="str">"submit"</span><span class="pln"> value</span><span class="pun">=</span><span class="str">"Enviar"</span><span class="pln"> </span><span class="pun">/&gt;</span><span class="pln">
</span><span class="lit">12.</span><span class="pun">&lt;</span><span class="str">/form&gt;</span></code></em></pre>
</div>
<p>Viram como é fácil? O arquivo final ficou dessa forma. Se você preferir pode copiar todo esse código JavaScript para um arquivo .js e incluí-lo no &lt;head&gt; do seu site da mesma forma que fizemos no começo da aula.</p>
<p>Coloquei alguns comentários na parte das instruções de validação para facilitar o entendimento.</p>
<p>Com isso você faz uma validação client-side que ajuda a evitar dados inválidos e campos vazios. Mas preciso lembrar que, por ser client-side, essa validação acontece apenas no computador do visitante e o mesmo pode desativar o JavaScript e a validação toda não irá funcionar. Então não se esqueça de fazer a mesma validação dentro do PHP quando receber os dados.</p>
<p>Veja o <a class="ext" href="http://thiagobelem.net/blog/exemplo2/">exemplo</a> desta aula funcionando.</p>
<p>Mais exemplos de validações diferentes podem ser encontrados no site do plugin: <a class="ext" href="http://jquery.bassistance.de/validate/demo/">http://jquery.bassistance.de/validate/demo/</a></p>
<p><em>Fonte: <a onclick="javascript:urchinTracker ('/outbound/article/www.pplware.com');" href="http://imasters.uol.com.br/artigo/12384/jquery/validacao_de_formularios_com_jquery/" target="_blank">Imasters</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/validacao-de-formularios-com-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upper-box &#8211; Componente para jQuery</title>
		<link>http://www.debugando.com/upper-box-componente-para-jquery/</link>
		<comments>http://www.debugando.com/upper-box-componente-para-jquery/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 00:50:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=513</guid>
		<description><![CDATA[Para nós, desenvolvedores, existem scripts, códigos, métodos, estruturas que carregamos conosco ano após ano. Utilizamos essas soluções empacotadas em determinados momentos, muitas vezes salvando nossas horas de descanso.
Há muito tempo, em um sistema web em que o foco era a visualização de documentos, o cliente solicitou que o menu fosse retrátil. Ou seja, o menu [...]]]></description>
			<content:encoded><![CDATA[<p>Para nós, desenvolvedores, existem scripts, códigos, métodos, estruturas que carregamos conosco ano após ano. Utilizamos essas soluções empacotadas em determinados momentos, muitas vezes salvando nossas horas de descanso.</p>
<p>Há muito tempo, em um sistema web em que o foco era a visualização de documentos, o cliente solicitou que o menu fosse retrátil. Ou seja, o menu superior da aplicação tinha que desaparecer se não estivesse sendo utilizado e aparecer quando o cursor do mouse se aproximasse dele. Para suprir isso criei uma função Javascript (utilizando CSS), e ficou bem bacana, simples e bastante útil. Esse script eu carrego comigo desde lá.</p>
<p>Precisei disso novamente alguns dias atrás, mas dessa vez fiz diferente. Tornei o script genérico, de modo que posso utilizar mais facilmente em qualquer aplicação web que tenha <a class="ext" href="http://jquery.com/">jQuery</a>, e ainda coloquei em um <a class="ext" href="http://github.com/wagnerandrade/upper-box/tree/master">repositório no Github</a> (repositório <a class="ext" href="http://en.wikipedia.org/wiki/Git_%28software%29">GIT</a>).</p>
<p>Sei que ainda é bastante primitivo e <strong>não está nos padrões de plugin jQuery. Mas essa é uma das intenções de colocar em um repositório público</strong>. Quem quiser usar e acoplar funcionalidades, otimizações e mesmo dar opiniões será muito bem-vindo. Pra quem não quer nem tocar no repositório, segue o link pra <a class="ext" href="http://github.com/wagnerandrade/upper-box/zipball/master">download </a> (versão mais recente). Veja um exemplo do seu funcionamento <a class="ext" href="http://www.wagnerandrade.com/upper-box/example.html">aqui</a>.</p>
<p>Pra explicar o que, como, onde, vou transcrever o README do repositório no Github abaixo.</p>
<h4>upper-box</h4>
<p>API javascript que transforma qualquer elemento de seu HTML (uma div, por exemplo) em uma caixa móvel posicionada na parte de cima da tela.</p>
<p>Para utilizá-lo é necessário estar com o jQuery adicionado ao documento.</p>
<h4>O que acontece?</h4>
<p>O elemento upper-box vai virar uma caixa invisível na parte de cima da tela.</p>
<p>Quando o usuário se aproxima com o mouse da parte superior da tela (body), o elemento ira rolar, abrindo e exibindo seu conteúdo.</p>
<h4>Como usar?</h4>
<p>Primeiro inclua os arquivos jQuery e upper-box no seu html, desta forma:</p>
<div class="codigo">
<pre><em><code>&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="upper-box.js"&gt;&lt;/script&gt;</code></em></pre>
</div>
<p>Seu uso é bem simples, basta adicionar upper-box ao class do elemento que vai virar upper-box.</p>
<p>Exemplo:</p>
<div class="codigo">
<pre><em><code>&lt;div id='div1' class='divClass'&gt;
 &lt;h2&gt;Olá,&lt;/h2&gt;
 &lt;p&gt;Esta div não é um &lt;b&gt;upper-box&lt;/b&gt;!&lt;/p&gt;
&lt;/div&gt;</code></em></pre>
</div>
<div class="codigo">
<pre><em><code>&lt;div id='div2' class='divClass upper-box'&gt;
 &lt;p&gt;Esta div será um &lt;b&gt;upper-box&lt;/b&gt;!&lt;/p&gt;
 &lt;p&gt;Simples, não?!&lt;/p&gt;
&lt;/div&gt;</code></em></pre>
</div>
<p>Espero não só ter ajudado como também ter instigado a colaboração de código.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/upper-box-componente-para-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery &#8211; Seletores e estilização</title>
		<link>http://www.debugando.com/jquery-seletores-e-estilizacao/</link>
		<comments>http://www.debugando.com/jquery-seletores-e-estilizacao/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 17:57:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=228</guid>
		<description><![CDATA[Esta matéria tem por finalidade mostrar os fundamentos básicos de seleção e estilização com uso da biblioteca jQuery.
Desenvolvemos uma página de apoio a este artigo na qual é possível verificar na prática o funcionamento do script aqui mostrado. A página encontra-se neste endereço e sinta-se à vontade para visitá-la e constatar seu funcionamento antes de [...]]]></description>
			<content:encoded><![CDATA[<p>Esta matéria tem por finalidade mostrar os fundamentos básicos de seleção e estilização com uso da biblioteca jQuery.</p>
<p>Desenvolvemos uma página de apoio a este artigo na qual é possível verificar na prática o funcionamento do script aqui mostrado. A página encontra-se <a class="ext" href="http://conteudo.imasters.uol.com.br/10790/jquery-um.html">neste endereço</a> e sinta-se à vontade para visitá-la e constatar seu funcionamento antes de prosseguir a leitura.</p>
<h4>Marcação HTML</h4>
<p>Observe com cuidado a marcação da página de apoio na qual aplicaremos os scripts de seleção e estilização.</p>
<pre><code><em>   ...
   &lt;h1&gt;jQuery -- Seletores&lt;/h1&gt;
    &lt;p&gt;Página criada...&lt;/p&gt;
   &lt;h2 id="um"&gt;Apresentação da jQuery&lt;/h2&gt;
    &lt;p&gt;jQuery é uma poderosa biblioteca...&lt;/p&gt;
    &lt;p&gt;Desenvolvedores especialistas em JavaScript...&lt;/p&gt;
   &lt;h2 id="dois"&gt;Livro jQuery do Maujor&lt;/h2&gt;
    &lt;p&gt;Este livro, na primeira parte...&lt;/p&gt;
    &lt;p&gt;Na segunda parte...&lt;/p&gt;
   &lt;p&gt;&lt;a href="http://www.livrojquery.com.br"&gt;Visite...&lt;/a&gt;&lt;/p&gt;
  &lt;h2 id="tres"&gt;Ficha Cadastral&lt;/h2&gt;
   &lt;ul class="ficha"&gt;
    &lt;li&gt;Título: jQuery&lt;/li&gt;
    &lt;li&gt;Subtítulo: A biblioteca do programador JavaScript&lt;/li&gt;
    &lt;li&gt;Autor: Maurício Samy Silva&lt;/li&gt;
    &lt;li&gt;Nacionalidade do autor: Brasileiro&lt;/li&gt;
    &lt;li&gt;ISBN: 978-85-7522-178-5&lt;/li&gt;
    &lt;li&gt;Dimensões: 17x24 cm&lt;/li&gt;
    &lt;li&gt;Número páginas: 432&lt;/li&gt;
    &lt;li&gt;Preço: R$75,00&lt;/li&gt;
    &lt;li&gt;Tiragem: 2.000 exemplares&lt;/li&gt;
    &lt;li&gt;Palavras-chave: jQuery, JavaScript...&lt;/li&gt;
   &lt;/ul&gt;
  ...</em>

</code></pre>
<h4>CSS</h4>
<p>A folha de estilos para o layout e apresentação da página de apoio não será analisada por ser irrelevante para o funcionamento do script. Contudo, há uma classe CSS chamada bloco, não constante da marcação, com respectiva regra CSS que será usada pelo script para demonstrar a adição de uma classe com uso do método addClass, como veremos adiante. A regra CSS é a seguinte:</p>
<pre><em><code>.bloco {
	display:block;
	border:1px solid #000;
	} </code></em></pre>
<h4>Linkando os scripts</h4>
<p>Scripts tal como folhas de estilos devem ser linkados ao documento onde serão empregados. Um documento que use a biblioteca jQuery deve estar linkado a ela como mostrado a seguir.</p>
<pre><code>  <em> &lt;head&gt;
   ...
   &lt;script type="text/javascript" src="jquery-x.x.x.mini.js"&gt;&lt;/script&gt;
   &lt;/head&gt;</em>

</code></pre>
<p>E os scripts que desenvolvemos para adicionar efeitos jQuery nas páginas devem ser também linkados ao(s) documento(s) que o(s) utilize(m). Na página de apoio usaremos o script incorporado ao documento para facilitar a consulta e estudo quando da visualização do código-fonte da página.</p>
<p>Scripts escritos em linguagem JavaScript e que façam busca de elementos da marcação para aplicar seus efeitos não funcionarão se forem declarados antes que o documento tenha sido carregado.</p>
<p>Quando colocamos um script na seção head do documento precisamos de um mecanismo para informar ao script que espere o documento ser carregado para entrar em ação. Em JavaScript tradicional a sintaxe consiste em encapsular o script em uma função definida para o método <kbd>window.onload</kbd> como mostrado a seguir.</p>
<pre><code> <em> &lt;head&gt;
  ...
   &lt;script type="text/javascript"&gt;
     window.onload = function() {
       ...script aqui...
     }
   &lt;/script&gt;</em>

</code>A biblioteca jQuery usa um método próprio chamado ready() que é o
equivalente ao método window.onload conforme mostrado a seguir.</pre>
<pre><code> <em>  &lt;head&gt;
   ...
   &lt;script type="text/javascript"&gt;
    $(document).ready(function() {
       ...script aqui...
       })
   &lt;/script&gt;</em>

</code>Agora estamos com o documento em condições de receber os scripts jQuery. A seção head contém o seguinte.

<code> <em>  &lt;head&gt;
   ...
   &lt;script type="text/javascript" src="jquery-x.x.x.mini.js"&gt;&lt;/script&gt;
   &lt;script type="text/javascript"&gt;
    $(document).ready(function() {
       ...script aqui...
       })
   &lt;/script&gt;</em></code></pre>
<h4>Método para adicionar estilos</h4>
<p>A biblioteca jQuery dispõe do método css() que permite adicionar estilos aos elementos de um documento. O método admite duas sintaxes conforme mostrado a seguir.</p>
<h4>Sintaxe para uma declaração CSS</h4>
<p>Usada para regra CSS com apenas uma declaração a ser aplicada no elemento alvo do seletor. As propriedades CSS compostas de mais de um termo como são f<kbd>ont-size, line-height, border-top-width</kbd> têm seus equivalentes JavaScripts em grafia conhecida como <a class="ext" href="http://pt.wikipedia.org/wiki/CamelCase">camelCase</a> e devem ser escritas <kbd>fontSize, lineHeight, borderTopWidth</kbd> respectivamente.</p>
<p><strong>Exemplos:</strong></p>
<pre><em><code>   css('color', '#fd6');
   css('fontSize', '14px');
   css('background', 'blue');
   css('lineHeight', '1.2');
   css('border', '1px dotted #333');</code></em></pre>
<h4>Sintaxe para mais de uma declaração CSS</h4>
<p>Usada para regra CSS com mais de uma declaração a ser aplicada no elemento alvo do seletor.</p>
<p><strong>Exemplo:</strong></p>
<pre><code> <em>  css({
   color: '#fd6',
   background: 'blue',
   lineHeight: '1.2',
   border: '1px dotted #333'
   });</em>

</code></pre>
<h4>Seletores tipo, id e class</h4>
<p>A biblioteca jQuery faz uso dos seletores CSS para selecionar seus alvos na árvore do documento (DOM &#8211; Document Object Model). Tal como as CSS existem os seletores tipo, de identificador único e de classe cuja sintaxe é mostrada a seguir.</p>
<pre><code> <em>  $('h3');
   $('ul');
   $('#topo');
   $('#principal');
   $('.separador');
   $('.destaque');</em></code></pre>
<h4>Código comentado</h4>
<ul>
<li>Linha 1 &#8212; Seletor tipo &#8211; seleciona os elementos h3.</li>
<li>Linha 2 &#8212; Seletor tipo &#8211; seleciona os elementos ul.</li>
<li>Linha 3 &#8212; Seletor id &#8211; seleciona o elemento com id=&#8221;topo&#8221;.</li>
<li>Linha 4 &#8212; Seletor id &#8211; seleciona o elemento com id=&#8221;principal&#8221;.</li>
<li>Linha 5 &#8212; Seletor class &#8211; seleciona o(s) elemento(s) com class=&#8221;separador&#8221;.</li>
<li>Linha 6 &#8212; Seletor class &#8211; seleciona o(s) elemento(s) com class=&#8221;destaque&#8221;.</li>
</ul>
<h4>Pseudoseletor :eq()</h4>
<p>Uma funcionalidade poderosa da biblioteca jQuery é que as seleções retornam um conjunto que pode ser manipulado como array. Isto significa que ao contrário do que ocorre com a linguagem JavaScript formal não há necessidade de construção de loops para se percorrer uma seleção de elementos no DOM. O pseudo seletor :eq() permite selecionar uma ou mais ocorrências de uma seleção jQuery, conforme esclarecem os exemplos a seguir.</p>
<pre><code>   <em>$('h2:eq(0)'); // seleciona a 1a. ocorrência de h2
   $('ul li:eq(5)'); // seleciona a 6a. ocorrência do item de uma lista
   $('p:eq(2n)'); // seleciona parágrafos de ordem ímpar</em></code></pre>
<p><span class="c1">Nota</span>: O parâmetro de seleção deste peseudoseletor pode ser um número ou uma expressão e segue o sistema de contagem padrão da linguagem JavaScript, isto é a contagem inicia em zero e não em um. Razão pela qual o seletor mostrado na linha 3 do código acima seleciona ocorrências ímpares e não pares, pois: 2&#215;0 = 0 (primeira ocorrência), 2&#215;1=2 (terceira ocorrência), 2&#215;2=4 (quinta ocorrência), e assim por diante.</p>
<h4>Métodos next(), children() e addClass()</h4>
<p>Para a página de apoio que preparamos para demonstrar os efeitos estudados nesta matéria usaremos estes três métodos cuja finalidade é a seguinte.</p>
<ul>
<li>Método next() &#8211; seleciona o elemento seguinte na marcação do documento.</li>
<li>Método children() &#8211; seleciona o(s) elemento(s) filho(s).</li>
<li>Método addClass() &#8211; adiciona uma classe no(s) elemento(s) selecionado(s).</li>
</ul>
<h4>Aplicação prática</h4>
<p>Vamos aplicar os conceitos de estilização e seleção estudados anteriormente para desenvolver o script que faz funcionar a página de apoio que você visitou, conforme sugerido no início desta matéria. A sintaxe é tão simples que eu tenho certeza que uma simples análise do código mostrado a seguir permitirá chegar-se à conclusão sobre o funcionamento do script.</p>
<p>Consultando a marcação apresentada no início da matéria acompanhe atentamente o script a seguir.</p>
<pre><code><em>  &lt;script type="text/javascript"&gt;
  $(document).ready(function(){
    $('#um').css('background', '#ff6');
    $('#dois').css({
      background: '#f00',
      color: '#fff',
      padding: '5px 0',
      textAlign: 'center'
    });
   $('h2:eq(2)').css('color', 'blue');
   $('#tres')
     .next()
     .children('li:first-child')
     .css('fontWeight, 'bold');
   $('.ficha li:nth-child(5)').css('background', '#0f0');
   $('cite').addClass('bloco');
   $('a[href*="livro"]').css('color', '#ff4500');
 });
  &lt;/script&gt;</em>

</code></pre>
<h4>Código comentado</h4>
<ul>
<li>Linhas 2 até 19 &#8211; Container do método ready().</li>
<li>Linha 3 &#8211; Seleciona o elemento com <kbd>id="um"</kbd> e aplica uma cor de fundo amarela.</li>
<li>Linhas 4 até 9 &#8211; Seleciona o elemento com <kbd>id="dois"</kbd> e usando a sintaxe para múltiplas declarações CSS aplica vários estilos.</li>
<li>Linha 10 &#8211; Usa o pseudoseletor :eq() para selecionar a terceira ocorrência de cabeçalho nível 2 e aplica a cor azul para o seu texto.</li>
<li>Linha 11 até 14 &#8211; Seleciona o elemento com <kbd>id="tres"</kbd> (terceira ocorrência de h2), usa o método next() para selecionar o elemento que vem depois dele (lista ul), procura entre os filhos <kbd>children()</kbd> de ul aquele que é o primeiro filho <kbd>first-child</kbd> e a ele aplica negrito.</li>
<li>Linha 15 &#8211; Seleciona os elementos li que são descendente do elemento com <kbd>class="ficha"</kbd>, procura a quinta ocorrência <kbd>nth:child(5)</kbd> e a ela aplica uma cor de fundo verde.</li>
<li>Linha 16 &#8211; Seleciona os elementos cite e a eles adiciona a classe bloco. Notar que foi definida uma regra de estilo para esta classe e em consequência quando o script entrar em ação os elementos cite da página seguirão esta regra CSS.</li>
<li>Linha 17 &#8211; Usa um seletor de atributo para mudar a cor dos links que contenham a palavra &#8220;livro&#8221; no atributo <kbd>href</kbd>.</li>
</ul>
<p>Dúvidas com seletores CSS? Consulte:</p>
<ul>
<li><a class="ext" href="http://www.maujor.com/tutorial/seletores_css21_parte1.php">Seletores CSS 2.1</a></li>
<li><a class="ext" href="http://www.maujor.com/tutorial/seletores-css3.php">Seletores CSS 3 </a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/jquery-seletores-e-estilizacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trabalhando com JSON</title>
		<link>http://www.debugando.com/trabalhando-com-json/</link>
		<comments>http://www.debugando.com/trabalhando-com-json/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 17:33:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JSon]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=195</guid>
		<description><![CDATA[A JSON nada mais é do que uma maneira de representar os objetos em JavaScript,ou seja, JSON é JavaScript puro. Para trabalhar com esse formato não é necessário usar DOM ou qualquer Framwork ou Kit específico, embora muitos dos frameworks de hoje em dia dêem algum tipo de suporte à JSON.
JSON se assemelha muito com [...]]]></description>
			<content:encoded><![CDATA[<p><strong>A JSON</strong> nada mais é do que uma maneira de representar os objetos em <em>JavaScript</em>,ou seja, JSON é <em>JavaScript</em> puro. Para trabalhar com esse formato não é necessário usar DOM ou qualquer Framwork ou Kit específico, embora muitos dos frameworks de hoje em dia dêem algum tipo de suporte à <strong>JSON</strong>.</p>
<p>JSON se assemelha muito com as matrizes do <em>JavaScript</em>, mas pode armazenar os mesmos dados que os documentos XML.<br />
Veja um breve exemplo:</p>
<p>dados retornados,<br />
<em><code>{"notas" : [<br />
{"nome":"João", "nota1":8, "nota2":6, "nota3":10 },<br />
{"nome":"Maria", "nota1":5, "nota2":9, "nota3":8 },<br />
{"nome":"Pedro", "nota1":2, "nota2":7, "nota3":5 }<br />
]};</code></em><br />
código da página,</p>
<p><code><br />
<em>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;script language="javascript"&gt;<br />
var request = null;<br />
try {<br />
request = new XMLHttpRequest();<br />
} catch (trymicrosoft) {<br />
try {<br />
request = new ActiveXObject("Msxml2.XMLHTTP");<br />
} catch (othermicrosoft) {<br />
try {<br />
request = new ActiveXObject("Microsoft.XMLHTTP");<br />
} catch (failed) {<br />
request = null;<br />
}<br />
}<br />
}</p>
<p>if (request == null)<br />
alert("Não foi possível criar o objeto !");</p>
<p>function obterDados() {<br />
var url = "alunos.php";<br />
url = url + "?cache=" + new Date().getTime();//para evitar problemas com o cache do navegador<br />
request.open("GET", url, true);<br />
request.onreadystatechange = exibe;//chame a função sem os parênteses<br />
request.send(null);<br />
}</p>
<p>function exibe(){<br />
if (request.readyState == 4) {//verifica o estado de prontidão</p>
<p>if (request.status == 200) {//verifica o status da requisição</p>
<p>//recupera os dados e os converte em um objeto<br />
var jsonData = eval('(' + request.responseText + ')');<br />
//o navegador trata a JSON com texto, portanto utilize o responseText<br />
//trabalhando com os dados<br />
var aluno1 = jsonData.notas[0].nome;//recupera o nome do primeiro aluno<br />
var aluno2 = jsonData.notas[1].nome;//recupera o nome do segundo aluno<br />
var aluno3 = jsonData.notas[2].nome;//recupera o nome do terceiro aluno<br />
//exibe as notas<br />
alert("Aluno : " + aluno1+"nNota1 : "+jsonData.notas[0].nota1+"nNota2 : "+jsonData.notas[0].nota2+"nNota3 : "+jsonData.notas[0].nota3);<br />
alert("Aluno : " + aluno2+"nNota1 : "+jsonData.notas[1].nota1+"nNota2 : "+jsonData.notas[1].nota2+"nNota3 : "+jsonData.notas[1].nota3);<br />
alert("Aluno : " + aluno3+"nNota1 : "+jsonData.notas[2].nota1+"nNota2 : "+jsonData.notas[2].nota2+"nNota3 : "+jsonData.notas[2].nota3);<br />
}<br />
}<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;script language="javascript"&gt;<br />
obterDados();//chama a função<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</em><br />
</code></p>
<p>O interessante da JSON é que ela é apenas javascript, portanto, o seu código JavaScript poderá utiliza-lá facilmente.</p>
<p>A má notícia é que JSON é JavaScript, linguagens como PHP, PERL e Asp não consiguirão entendê-la. Provalvelmente você precisará de alguma biblioteca para exibir a JSON em seus scripts de servidor.</p>
<p>Para fazer o download das bibliotecas mais comuns de JSON, acesse:<a href="http://www.json.org/" target="_blank">www.json.org</a></p>
<p>Veremos agora um exemplo de como gerar uma JSON resposta no PHP<br />
<code></p>
<p><em>&lt;?php header("Content-Type: text/html; charset=ISO-8859-1",true); ?&gt;</p>
<p>&lt;?php<br />
require("JSON.php");  //importando a biblioteca</p>
<p>$json = new Services_JSON();//criando o objeto para manipular a JSON</p>
<p>$aluno1 = array('nome'=&gt; 'Ana',<br />
'nota1'=&gt; "8",<br />
'nota2'=&gt; "6" ,<br />
'nota3'=&gt; "2");<br />
$aluno2 = array('nome'=&gt; 'Maria',<br />
'nota1'=&gt; "5",<br />
'nota2'=&gt; "9" ,<br />
'nota3'=&gt; "8");<br />
$aluno3 = array('nome'=&gt; 'Pedro',<br />
'nota1'=&gt; "2",<br />
'nota2'=&gt; "7" ,<br />
'nota3'=&gt; "5");<br />
$notas = array('notas' =&gt; array($aluno1, $aluno2, $aluno3));</p>
<p>$output = $json-&gt;encode($notas);<br />
echo($output);<br />
?&gt;</em><br />
</code><br />
Como podemos observar, primeiro temos de criar um vetor para cada aluno, em seguida deve-se criar um outro vetor para armazenar os vetores de alunos, formando uma matriz.<br />
Já foi dito anteriormente que matrizes são os objetos que mais se assemelham à JSON, por isso a grande maioria de classes para a JSON, pedirá como parâmetro de entrada uma matriz;<br />
Este foi apenas um exemplo simples simples para a utilização da JSON.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/trabalhando-com-json/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uma aula prática de jQuery</title>
		<link>http://www.debugando.com/uma-aula-pratica-de-jquery/</link>
		<comments>http://www.debugando.com/uma-aula-pratica-de-jquery/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 12:16:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=124</guid>
		<description><![CDATA[Nomenclatura
Durante o texto vou me referir à função $ como função jQuery, pois na verdade elas são a mesma coisa. A diferença é que a função $ não estará disponível se você optar por utilizá-la sem conflitos.
Como começar
Antes de escrever qualquer código JavaScript, faço questão de utilizar aquela técnica clássica onde o nosso código JS [...]]]></description>
			<content:encoded><![CDATA[<h2>Nomenclatura</h2>
<p>Durante o texto vou me referir à função <code>$</code> como função <code>jQuery</code>, pois na verdade elas são a mesma coisa. A diferença é que a função <code>$</code> não estará disponível se você optar por utilizá-la <em>sem conflitos</em>.</p>
<h2>Como começar</h2>
<p>Antes de escrever qualquer código JavaScript, faço questão de utilizar aquela técnica clássica onde o nosso código JS começa a ser executado apenas quando o DOM terminou de ser carregado:</p>
<pre><code><em>$(document).ready(function() {
    // aqui vai o código específico da sua aplicação
});</em>
</code></pre>
<p>Esse código eu deixo em um arquivo externo, e o referencio a partir da tag <code>&lt;script&gt;</code> presente no meu template HTML (independente do framework que você estiver &#8211; ou não &#8211; utilizando, manter o código JS fora do seu template HTML é uma forma simples de separar apresentação e comportamento).</p>
<p>Deste ponto em diante passo a omitir essas linhas de inicialização. Todo o código que for exibido pode ser posicionado na linha 2 da listagem de código acima.</p>
<h2>Encontrando elementos</h2>
<p>Cedo ou tarde você precisará encontrar elementos do seu documento e manipulá-los. Na verdade, boa parte da minha programação JavaScript consiste disso. Com o jQuery, qualquer ação começa com uma chamada à função jQuery, e com esta não poderia ser diferente. Para encontrar um elemento você pode passar uma string que atenda a especificação da biblioteca para seletores. Alguns exemplos:</p>
<pre><code><em>// todos os parágrafos contendo a classe "warning"
$('p.warning');

// todas as checkboxes dentro do elemento de id "users_list"
$('#users_list input[type=checkbox]');</em>
</code></pre>
<h2>Fazendo alguma coisa com os elementos</h2>
<p>Encontrar os elementos e não fazer nada com eles não serve pra muita coisa. Por exemplo, vamos imaginar que você queira fazer a seguinte operação: quando o usuário clicar em um link com a classe <code>help</code>, vamos mostrar a ele um alerta. É algo bem estúpido, e como esperado, simples de fazer:</p>
<pre><code><em>$('a.help').click(function() {
    alert('Você clicou num parágrafo de ajuda!');
});</em>
</code></pre>
<p>A função jQuery, quando recebe uma string, irá retornar um outro objeto jQuery, contendo internamente uma lista de todos os elementos encontrados no documento que satisfazem a sua consulta. Como esse retorno é um outro objeto jQuery, você já pode realizar uma chamada de função sobre esse objeto (neste caso, <code>click</code>). Veremos mais adiante como levar esse conceito ao extremo.</p>
<h2>Parando eventos</h2>
<p>Quando definimos o evento para cliques sobre links com a classe <code>help</code>, não evitamos que a URL especificada no atributo <code>href</code> do link fosse seguida pelo navegador. Se  esse link tinha como <code>href</code> o símbolo <code>#</code>, então após o clique a barra de rolagem vertical (se existia) foi movida para o topo do documento.</p>
<p>Para evitar esse comportamento, precisamos utilizar o objeto de tipo <code>Event</code> que o jQuery envia para a nossa função de processamento de eventos. Veja como:</p>
<pre><code><em>$('a.help').click(function(e) {
    // o link não será seguido pelo navegador
    e.preventDefault();
});</em>
</code></pre>
<p>Caso você esteja observando a submissão de um formulário, pode utilizar a mesma técnica para evitar que o formulário seja submetido.</p>
<pre><code><em>$('form#create_user').submit(function(e) {
    // o formulário não será enviado
    e.preventDefault();
});</em>
</code></pre>
<p>Esses são apenas alguns dos eventos disponíveis, aqui você pode encontrar todos eles.</p>
<h2>Manipulando as classes de um elemento</h2>
<p>Você tem à disposição 3 métodos básicos para manipular as classes de elementos. Aprenda a utilizá-los com exemplos:</p>
<pre><code><em>// adiciona a classe "teste" ao parágrafo
$('p:first').addClass('teste')

// remove a classe "teste" ao parágrafo
$('p:first').removeClass('teste')

// adiciona (se não existir) ou remove (se existir) a classe "teste" ao parágrafo
$('p:first').toggleClass('teste')</em>
</code></pre>
<h2>Acessando atributos</h2>
<p>Acessar atributos é algo trivial com jQuery:</p>
<pre><code><em>// recupera o "href" do link
var id = $('a#add_another_row').attr('id');

// define o "href" do link
var id = $('a#add_another_row').attr('href', '#');</em>
</code></pre>
<p>Note que <code>attr</code> atua apenas sobre o primeiro elemento interno a um objeto jQuery. Por atributos, nesse caso, entende-se as <em>propriedades</em> de um elemento <em>HTML</em> (diferente de suas propriedades de estilo).</p>
<h2>Definindo estilos de elementos</h2>
<p>Sempre que possível procuro manter todos os estilos associados ao documento dentro das minhas definições CSS. Assim, se quero modificar o visual do sistema, sei que é apenas lá que devo mexer. Mas em algumas situações me vi obrigado a quebrar essa regra. São casos onde você precisará manipular propriedades CSS específicas de elementos.</p>
<pre><code><em>$('a#do_something_crazy').click(function(e) {
    e.preventDefault();

    // vamos recuperar a cor do link
    alert("Agora o link tem cor " + $(this).css('color'));

    // agora vamos alterar apenas a cor do link
    $(this).css('color', 'blue');

    // agora vamos alterar as propriedades CSS "color" e "background-color" do link
    $(this).css({
        color: 'green',
        backgroundColor: 'red'
    });
});</em>
</code></pre>
<p>Na listagem acima apresentei as 3 formas de utilizar a função <code>css</code>:</p>
<ul>
<li><code>css(propriedade)</code>: recupera o valor de “propriedade”</li>
<li><code>css(propriedade, valor)</code>: define o valor de “propriedade” como “valor”</li>
<li><code>css(objeto)</code>: define diversos pares de “propriedade/valor”</li>
</ul>
<h2>Encontrando elementos ancestrais</h2>
<p>Imagine que você está definindo um tratador de evento sobre um link. Esse link está dentro de uma célula de tabela (<code>td</code>), que por sua vez está dentro de uma linha de tabela (<code>tr</code>). No contexto do tratamento desse evento, seu objeto atual, associado à variável <code>this</code>, é esse link. Nesse momento você percebe que precisa, por algum motivo, do <code>id</code> da linha onde está link (isso acontece bastante comigo). Para esses casos utilize a função <code>parents</code>, que retorna todos os ancentrais do elementos do objeto jQuery atual.</p>
<pre><code><em>$('a#do_something').click(function(e) {
    var rowId = $(this).parents('tr:first').attr('id');
});</em>
</code></pre>
<p>Como <code>parents</code> retorna <em>todos</em> os ancestrais, passamos à função um seletor jQuery, indicando que queremos apenas a primeira linha. Simples, rápido e indolor.</p>
<h2>Encontrando elementos filhos</h2>
<p>Já vimos como encontrar ancestrais. Quando você quer fazer o caminho inverso, é só utilizar a função <code>find</code>. Por exemplo, imagine que você está processando a submissão de um formulário e precisa encontrar vários campos desse formulário, para validá-los. Se eles não possuem <code>id</code>’s associados, o <code>find</code> será uma mão na roda.</p>
<pre><code><em>$('form#authentication').submit(function(e) {
    e.preventDefault();
    var username = $(this).find('input[name=username]').val();
    var password = $(this).find('input[name=password]').val();
});</em>
</code></pre>
<h2>Valores de elementos</h2>
<p>Utilize a função <code>val</code> para descobrir o conteúdo de determinados elementos (como o conteúdo de uma caixa de texto, por exemplo):</p>
<pre><code><em>$('#username').val();</em>
</code></pre>
<p>Funções semelhantes são <code>text</code> e <code>html</code>.</p>
<h2>Realizando tarefas de acordo com o navegador do usuário</h2>
<p>Como avisar ao seu usuário que você, por exemplo, está utilizando uma biblioteca baseada no elemento <code>canvas</code>, e que a experiência desse usuário no Internet Explorer não será tão boa (baixa performance)? Verifique que navegador ele está utilizando:</p>
<pre><code><em>if ($.browser.msie) {
    alert('Experimente o Firefox!');
}</em>
</code></pre>
<p>Você pode realizar testes para outros navegadores também, é claro. Dê uma olhada na documentação dos utilitários da biblioteca.</p>
<h2>Inserindo elementos no documento</h2>
<p>Volta e meia crio pequenos frameworks baseados em classes de elementos, de forma a evitar a repetição de código HTML. Nesses casos sempre é bom poder inserir código HTML arbitrário após a carga do documento. Eis como fazer isso com jQuery:</p>
<pre><code><em>$('&lt;p&gt;Este parágrafo foi inserido dinamicamente!&lt;/p&gt;').appendTo('body');
$('&lt;p&gt;Este parágrafo também foi inserido dinamicamente!&lt;/p&gt;').prependTo('body');</em>
</code></pre>
<p>Como podemos ver, quando a string enviada à função jQuery não é reconhecida como um seletor, ela é reconhecida como um elemento a ser criado (não sei se é exatamente essa a implementação interna, mas se você pensar assim não terá problemas para entender a diferença entre enviar  uma string como seletor ou um novo elemento HTML).</p>
<p>As funções <code>appendTo</code> e <code>prependTo</code> são muito úteis nesses casos. Com elas você indica que quer inserir um elemento como último ou como primeiro filho do elemento passado como parâmetro.</p>
<p>Sendo honesto: muitas vezes preciso inserir muito mais HTML do que uma linhazinha dessas. Em situações reais já precisei inserir grandes trechos de formulário, por exemplo. Não tenha medo: insira uma contra-barra ao fim de cada linha e prolongue sua string HTML por diversas linhas:</p>
<pre><code><em>$('&lt;p class="input_row"&gt; \
   &lt;input id="username" type="text" /&gt; \
   &lt;/p&gt; \
   ...'
  )
  .prependTo($('form#auth'));</em>
</code></pre>
<h2>Criando um cache</h2>
<p>Quando você precisa fazer 2 operações diferentes utilizando o mesmo seletor, mas em pontos diferentes do código, é interessante atribuir o objeto jQuery que contém o resultado da consulta a uma variável, para evitar o custo de processamento de uma nova consulta.</p>
<p>Portanto, isto não é legal:</p>
<pre><code><em>$('a.special').click(function() {
    //
});

// muitas linhas depois...

$('a.special').hover(function() {
    //
});</em>
</code></pre>
<p>Isto é legal:</p>
<pre><code><em>var $specialLinks = $('a.special');

$specialLinks.click(function() {
    //
});

// muitas linhas depois...</em>

<em>$specialLinks.hover(function() {
    //
});</em>
</code></pre>
<p>Note que utilizei um cifrão como prefixo para a variável <code>$specialLinks</code>. Considero isso uma boa prática dentro de código JS que utilize jQuery, pois deixa bem claro quais variáveis são objetos jQuery e quais não são. Se você for estudar o código de plugins é provável que encontre essa mesma convenção sendo seguida.</p>
<h2>Encadeando funções</h2>
<p>Como disse anteriormente, toda função jQuery que você invoca a partir de um objeto jQuery retorna o próprio objeto jQuery. Isso significa que em vez de fazer isto:</p>
<pre><em><code>var $newP = $('&lt;p class="warning"&gt;&lt;/p&gt;');
$newP.css('width', '100%');
$newP.appendTo('body');
</code></em></pre>
<p><em>Você pode fazer isto:</em></p>
<pre><code><em>$('&lt;p class="warning"&gt;&lt;/p&gt;')
    .css('width', '100%')
    .appendTo('body');</em>
</code></pre>
<p>Sim, você pode encadear quantas chamadas quiser.</p>
<p>Em inglês o termo para esse encadeamento de chamadas é <em>chaining</em>. Quando vi o código disposto dessa forma pela primeira vez não gostei nenhum pouco, pensei: “nunca vou fazer isso!”. Mas hoje, se você abrir meus arquivos JS verá encadeamento de chamadas por todo lado. Acho que isso vicia, simplesmente.</p>
<p>Se você for utilizar aquele parágrafo em algum outro ponto do código, crie um cache para ele no momento da criação:</p>
<pre><code><em>var $warningP = $('&lt;p class="warning"&gt;&lt;/p&gt;')
    .css('width', '100%')
    .appendTo('body');</em>
</code></pre>
<h2>Utilizando plugins</h2>
<p>Sem plugins o jQuery já teria sido uma grande idéia, mas com a possibilidade de definir novas funções para o objeto jQuery, fica difícil reclamar dessa biblioteca. Em geral um plugin jQuery tem um nome bastante sugestivo (como <code>tablesorter</code>), e o nome dele indica exatamente qual o nome da função que corresponde ao plugin.</p>
<p>Para utilizar qualquer plugin jQuery basta incluir no seu cabeçalho HTML uma referência (tag <code>&lt;script&gt;</code>) ao código-fonte do plugin após ter referenciado o código-fonte do jQuery. Digamos que estejamos utilizando o plugin <code>tablesorter</code>, capaz de dar à tabelas HTML poderes de ordenação de colunas. Eu utilizaria o plugin da seguinte forma:</p>
<pre><code><em>// primeiro verifique se o plugin foi carregado
if ($.fn.tablesorter) {
    $('table.record_list').tablesorter();
}</em>
</code></pre>
<p>Com o código acima aplicamos o comportamento oferecido pelo plugin a todas as tabelas de classe <code>record_list</code> do documento.</p>
<p>Note que a grande maioria dos plugins opta pela simplicidade: eles funcionam sem que você passe parâmetros para a função principal. Se você precisar passar parâmetros, em geral você irá passar um objeto literal, o qual sobrescreverá as opções padrão do plugin.</p>
<h2>jQuery e Firebug</h2>
<p>Dentro de um projeto que utiliza o jQuery, tire o máximo de proveito da biblioteca. Se aquele seletor jQuery que você escreveu não está funcionando, copie e cole o código no console do Firebug e veja a resposta. Se a resposta do console for simplesmente um array vazio, quer dizer que seu seletor não casou com nenhum elemento. Caso contrário, você verá uma representação dos elementos que casaram.</p>
<p>Além de fazer consultas no documento, gosto de manipular os elementos que encontro via Firebug. Por exemplo:</p>
<pre><code><em>$('p.warning:first').css('background-color', 'red');</em>
</code></pre>
<p>Acho mais fácil que utilizar o editor de CSS embutido no Firebug.</p>
<h2>Um exemplo completo</h2>
<p>Nosso documento contém uma tabela com a classe <code>record_list</code>, a qual está envolvida por uma <code>div#table_panel</code>. Após o carregamento da página, vamos adicionar um link abaixo dessa tabela. Esse link, quando clicado, adiciona uma nova linha à tabela. Este exemplo sozinho não serve para nada, mas utilizei a mesma idéia aqui no meu projeto para criar uma tabela que exibia todas as curvas de um gráfico. Para adicionar mais uma curva ao gráfico, eu utilizava essa mesma abordagem: primeiro adicionava a nova linha, e em seguida gerava o gráfico novamente, via Ajax.</p>
<pre><code><em>$(document).ready(function() {
    $('&lt;a href="#" id="create_new_line"&gt;Criar nova linha&lt;/a&gt;')
        .click(function(e) {
            e.preventDefault();
            $('&lt;tr&gt; \
                 &lt;td&gt;...&lt;/td&gt; \
                 &lt;td&gt;...&lt;/td&gt; \
                 &lt;td&gt;...&lt;/td&gt; \
               &lt;/tr&gt;'
            )
            .appendTo('table.record_list:first');
        })
        .appendTo('#table_panel');
});</em>
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/uma-aula-pratica-de-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prototype &#8211; Janelas em AJAX</title>
		<link>http://www.debugando.com/prototype-janelas-em-ajax/</link>
		<comments>http://www.debugando.com/prototype-janelas-em-ajax/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 14:02:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=55</guid>
		<description><![CDATA[O Prototype é um Javascript poderoso que você pode utilizar para criar elegantes janelas HTML no seu site. Com facilidade e algum conhecimento em Javascript você pode abrir janelas dentro da página, movimentar, minimizar, adicionar efeitos visuais, personalizar, etc.
Visite o endereço abaixo e clique nas opções “click here” para ver cada exemplo:
http://prototype-window.xilinus.com/samples.html
Você pode definir o [...]]]></description>
			<content:encoded><![CDATA[<div class="artigo">O Prototype é um Javascript poderoso que você pode utilizar para criar elegantes janelas HTML no seu site. Com facilidade e algum conhecimento em Javascript você pode abrir janelas dentro da página, movimentar, minimizar, adicionar efeitos visuais, personalizar, etc.</p>
<p>Visite o endereço abaixo e clique nas opções “click here” para ver cada exemplo:</p>
<p><a rel="nofollow" href="http://prototype-window.xilinus.com/samples.html" target="_blank">http://prototype-window.xilinus.com/samples.html</a></p>
<p>Você pode definir o visual das janelas ou pode escolher alguns templates prontos:</p>
<p><a rel="nofollow" href="http://prototype-window.xilinus.com/themes.html" target="_blank">http://prototype-window.xilinus.com/themes.html</a></p>
<p>Para copiar e testar visite:</p>
<p><a rel="nofollow" href="http://prototype-window.xilinus.com/download.html" target="_blank">http://prototype-window.xilinus.com/download.html</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/prototype-janelas-em-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cálculo de frete dos Correios utilizando AJAX</title>
		<link>http://www.debugando.com/calculo-de-frete-dos-correios-utilizando-ajax/</link>
		<comments>http://www.debugando.com/calculo-de-frete-dos-correios-utilizando-ajax/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 13:54:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript/Ajax]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Correios]]></category>
		<category><![CDATA[frete]]></category>

		<guid isPermaLink="false">http://www.debugando.com/?p=51</guid>
		<description><![CDATA[Esse script realiza o cálculo do valor do frete nos correios utilizando apenas AJAX. Para utilizar este módulo, faça da seguinte maneira:
function callback(dados) {
alert('O valor total é R$' + dados['preco_postal']);
}
Correios.calcular(callback, null, '33000-000', '33000-001', peso=5);
Não se esqueça de ler as instruções. É indispensável que você faça uma regra no apache e que modifique o atributo &#8220;url&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Esse script realiza o cálculo do valor do frete nos correios utilizando apenas AJAX. Para utilizar este módulo, faça da seguinte maneira:</p>
<pre><em>function callback(dados) {
alert('O valor total é R$' + dados['preco_postal']);
}
Correios.calcular(callback, null, '33000-000', '33000-001', peso=5);</em></pre>
<p>Não se esqueça de ler as instruções. É indispensável que você faça uma regra no apache e que modifique o atributo &#8220;url&#8221; do protótipo Correios.</p>
<p>Script</p>
<pre><em>//******************************************************************************
// @name:        util.correios.calculo.js
// @purpose:     interface para efetuar os cálculos de frete nos correios.
//               Para que ele funcione você precisa criar uma regra em seu
//               servidor para reescrever as urls vindas de determinado
//               endereço. No meu caso, que uso apache, minha regra ficou assim:
//               - Utilizando mod_rewrite:
//                  RewriteEngine On
//                  RewriteCond %{REQUEST_URI} ^(/correios/*)
//                  RewriteRule ^/correios/(.*) http://www.correios.com.br/$1  [NE,L,P]
//               - Ou utilizando mod_proxy:
//                  ProxyRequests On
//                  ProxyVia On
//                  ProxyPass /correios/ http://www.correios.com.br/
//
// @example:     Para utilizar este módulo, faça da seguinte maneira:
//                 function callback(dados) {
//                     alert('O valor total é R$' + dados['preco_postal']);
//                 }
//                 Correios.calcular(callback, null, '33030-645', '30535-630', peso=5);
//
// @author:      Ruhan Bidart - ruhanbidart __at__ gmail __dot__ com
// @created:     08/09/2008
// @version:     0.1
//******************************************************************************
var Correios = {
    // Propriedades:
    // nao se esqueca de reescreve-la no seu server, senao ocasiona
    // um erro de permissao
     url : 'http://localhost/correios/encomendas/precos/calculo.cfm',
    _retorno: null,
    callback: function() { alert('Voce nao implementou uma funcao de callback');},

    // Funções:
    get_dados : function(dados) {
        var handler = new XMLHandler();
        var xmlreq = new XMLClient(Correios.url);
        // parametros
        for(var key in dados) {
            // nao insere aqueles que sao null
            if(dados[key] != null) xmlreq.addParam(key, dados[key]);
        }
      handler.onError = function (e) {
          throw('Ocorreu um erro ao tentar chamar a url ' + Correios.url + '
                com os parametros que voce informou. Mensagem  original: '+ e)
      }
      handler.onProgress = function () {}
      handler.onInit = function () {}
      handler.onLoad = function (xml) {
          var parser = new XMLParser();
          var xmlobj = parser.parseString(xml);
          var rootnd = xmlobj.documentElement;
          // verificando se ocorreu algum erro nos correios
            var erro = rootnd.getElementsByTagName('erro')[0];
            if(erro &amp;&amp; erro.getElementsByTagName('codigo')[0].firstChild.nodeValue != '0') {
                throw('Ocorreu um erro nos correios. ' + erro.getElementsByTagName('descricao')[0].firstChild.nodeValue);
            }
            // caso nao tenha ocorrido nenhum erro, monta o dicionario de retorno
            Correios.callback(Correios.xml_to_dict(rootnd.getElementsByTagName('dados_postais')[0]));
      }
      xmlreq.query(handler);
    },    

    xml_to_dict: function(elementos) {
        var dic = {};
        for(var i=0; i&lt;elementos.childNodes.length; i++) {
            var el = elementos.childNodes[ i ];
            if(el.nodeType == 1) dic[el.tagName] = el.firstChild.nodeValue;
        }
        return dic;
    },

    calcular : function(callback, servico, cep_origem, cep_destino, peso,
                        mao_propria, valor_declarado, aviso_recebimento) {
      // Parâmetros:
      //  callback: funcao que sera chamada depois de terminar de executar
      //            o calculo.
      //    servico: Código do tipo de entrega que será calculada
      //                O valores possíveis são:
      //                - 40010 (SEDEX)
      //                - 40010 (SEDEX)
      //                - 40290 (SEDEX Hoje)
      //                - 40215 (SEDEX 10)
      //                - 40045 (SEDEX a Cobrar)
      //                - 81019 (e-SEDEX)
      //                - 44105 (MALOTE)
      //                Valor padrão é: 40010
      //    cep_origem: Cep de Origem no formato XXXXX-XXX
      //    cep_destino: Cep de Destino no formato XXXXX-XXX
      //    peso: Peso da remessa limite de 30, menor 0.3
      //    mao_propria: Serviço de Mão Própria(S/N)
      //             Valor padrão é: N
      //    valor_declarado: Serviço de seguro com valor declarado
      //    aviso_recebimento: Serviço de Aviso de Recebimento(S/N)
      //             Valor padrão é: N
        //
        // Retorno:
       // Dicionario com os  dados retornados pelo correio. Eles
       // estarão na forma (em uma pesquisa feita de um frete de BH para RJ - Interior):
      //   {'servico': 40010,
      //    'servico_nome': SEDEX,
      //    'uf_origem': 'MG',
      //    'local_origem': 'Capital',
      //    'cep_origem': '33030645',
      //    'uf_destino': 'RJ',
      //    'local_destino': 'Interior',
      //    'cep_destino': '25770970',
      //    'peso': 10,
      //    'mao_propria': 0,
      //    'aviso_recebimento': 0,
      //    'valor_declarado': 0,
      //    'tarifa_valor_declarado': 0,
      //    'preco_postal': 73.7 }
      // ** E serão retornados como parametro para a funcao de callback.
      Correios.callback = callback;
        if(!servico) servico = 40010;
        if(!peso || peso &lt; 0.3) peso = null;
        if(peso &gt; 30) throw('A mercadoria não pode pesar mais do que 30 Kg');
        if(!mao_propria) mao_propria = null;
        if(!valor_declarado) valor_declarado = null;
        if(!aviso_recebimento) aviso_recebimento = null;
        var dados = {'servico': servico,
                     'cepOrigem': cep_origem,
                     'cepDestino': cep_destino,
                     'peso': peso,
                     'maoPropria': mao_propria,
                     'valorDeclarado': valor_declarado,
                     'avisoRecebimento': aviso_recebimento,
                     'resposta': 'Xml'}
        return Correios.get_dados(dados);
    }
}

/********************************************************************************
* Biblioteca para trabalhar com Ajax.
* Obs.: Se você precisa de um script de tamanho menor, implemente novamente o
* post feito em Ajax para formatar um código lightweight.
* ** O código abaixo não foi feito por mim.
********************************************************************************/
var aXmlIds = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP", "MICROSOFT.XMLHTTP.1.0", "MICROSOFT.XMLHTTP.1", "MICROSOFT.XMLHTTP"];
function XMLClient(sUrl, bdoAsync)
{
    this.sUrl = sUrl;
    this.oHandler = null;
    this.oXMLRequest = null;
    this.sParams = '';
    if (bdoAsync == undefined) bdoAsync = true;
    this.bdoAsync = bdoAsync;
    this.sClosureNode = "";
}
XMLClient.prototype.query = function(oHandler)
{
    this.oHandler = oHandler;
    if (window.XMLHttpRequest)
    {
        if (!this.oXMLRequest)
            this.oXMLRequest = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        for (var i = 0; i &lt; aXmlIds.length; i++)
        {
            try
            {
                this.oXMLRequest = new ActiveXObject(aXmlIds[ i ]);
                break;
            } catch(e) { }
        }
    }
    else
    {
        if (!this.oIframe)
        {
            var oIframe = document.createElement("IFRAME");
            oIframe.setAttribute("id", "xmlhttpFrame");
            oIframe.setAttribute("name", "xmlhttpFrame");
            oIframe.style.visibility = "hidden";
            oIframe.style.position = "absolute"
            oIframe.style.top = "0px";
            oIframe.style.left = "0px";
            document.body.appendChild(oIframe);
            this.oIframe = document.getElementById("xmlhttpFrame");
        }

        this.oIframe.setAttribute("src", this.sUrl + "?" + this.sParams);
        window.clearInterval(this.iTimeout);
        this.bJustCalled = true;
        var oSelf = this;
        this.iTimeout = window.setInterval(function() {oSelf.processReqChange(oSelf);}, 500);
    }

    if (this.oXMLRequest)
    {
        var oSelf = this;
        if(this.bdoAsync){ this.oXMLRequest.onreadystatechange = function () {oSelf.processReqChange()}; }
        this.oXMLRequest.open("POST", this.sUrl, this.bdoAsync);
        this.oXMLRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        this.oXMLRequest.send(this.sParams);
        if (!this.bdoAsync)
            return this.oXMLRequest.responseText;
    }
}
XMLClient.prototype.setAsync = function (bdoAsync)
{
    this.bdoAsync = bdoAsync;
}
XMLClient.prototype.setClosureNode = function(sNodeName)
{
    this.sClosureNode = sNodeName;
}
XMLClient.prototype.processIFrame = function()
{
    var oLoadedData = null;
    if (document.frames["xmlhttpFrame"] != null)
    {
        var sDoc = document.frames["xmlhttpFrame"].document.body.innerHTML;
        if ((sDoc.indexOf("/" + this.sClosureNode) != -1) || (sDoc.indexOf(this.sClosureNode + "/") != -1))
        {
            oLoadedData = document.frames["xmlhttpFrame"].document;
            this.iReadyState = 4;
            window.clearInterval(this.iTimeout);
        }
        return oLoadedData;
    }

}
XMLClient.prototype.processReqChange = function ()
{
    if (this.oIframe != null)
    {
        if (this.bJustCalled)
        {
            this.bJustCalled = false;
            this.iReadyState = 1;
        }
        else
        {
            oLoadedData = this.processIFrame();
            if (oLoadedData == null)
            {
                return;
            }
        }
    }

    if (this.oXMLRequest != null)
    {
        this.iReadyState = this.oXMLRequest.readyState;
    }

    switch (this.iReadyState)
    {
            case 1:
                this.oHandler.onInit();
                break;

            case 2:
                if (window.XMLHttpRequest)
                {
                    if (this.oXMLRequest.status != 200)
                    {
                        this.oHandler.onError(this.oXMLRequest.status,
                                              this.oXMLRequest.statusText);
                        this.oXMLRequest.abort();
                    }
                }
                else if (this.oIframe != null)
                {
                    this.oHandler.onError(-1, oLoadedData);
                }
                break;

            case 3:
                var contentLength = 0;
                if (window.XMLHttpRequest)
                {
                                                            try
                    {
                        contentLength = this.oXMLRequest.getResponseHeader("Content-Length");
                    }
                    catch(ex)
                    {
                    }
                    if (this.oIframe != null)
                    {
                        this.oHandler.onProgress(oLoadedData.length);
                    }
                    this.oHandler.onProgress(this.oXMLRequest.responseText.length);
                }
                break;

            case 4:
                if (this.oIframe != null)
                {
                    this.oHandler.onLoad(oLoadedData);
                }
                else
                {
                    this.oHandler.onLoad(this.oXMLRequest.responseText);
                }
                break;
    }
}

XMLClient.prototype.addParam = function (paramName, paramValue)
{
    if (this.sParams.length &gt; 0)
    {
        this.sParams = this.sParams + "&amp;";
    }
    this.sParams= this.sParams + paramName + "=" + escape(paramValue);
}

XMLClient.prototype.clearParameters = function ()
{
    this.sParams = "";
}

XMLClient.prototype.getReadyState = function ()
{
        return this.iReadyState;
}

XMLClient.prototype.abort = function ()
{
    try
    {
        if (this.oXMLRequest)
        {
            this.oXMLRequest.abort();
        }
        else
        {
            this.oIframe.setAttribute("src", "");
        }
    }
    catch(e)
    {
    }
}

function XMLHandler ()
{
}

XMLHandler.onInit = function ()
{
}

XMLHandler.onError = function (status, statusText)
{
}

XMLHandler.onProgress = function (dataLength)
{
}

XMLHandler.onLoad = function (responseText)
{
}

function XMLParser ()
{
        try
    {
        this.parser = new DOMParser();
    }
    catch (e)
    {
        this.parser = new ActiveXObject('Microsoft.XMLDOM');
    }
}

XMLParser.prototype.parseString = function (xmlText)
{
    try
    {
        XMLDocument = this.parser.parseFromString(xmlText, "text/xml");
    }
    catch (e)
    {
        this.parser.async = 'false';
        this.parser.loadXML(xmlText);
        XMLDocument = this.parser;
    }

    return XMLDocument;
}</em></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.debugando.com/calculo-de-frete-dos-correios-utilizando-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

