<?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>JavaScript: Singuska &#187; Gambiarra</title>
	<atom:link href="http://javascript.singuska.com/category/gambiarra/feed/" rel="self" type="application/rss+xml" />
	<link>http://javascript.singuska.com</link>
	<description>Fragmentos de código e gambiarras (0.2)</description>
	<lastBuildDate>Mon, 03 Oct 2011 19:45:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Click interrompido</title>
		<link>http://javascript.singuska.com/2011/06/22/click-interrompido/</link>
		<comments>http://javascript.singuska.com/2011/06/22/click-interrompido/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 04:51:48 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[funções]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=605</guid>
		<description><![CDATA[Um padrão recorrente na programação em jQuery é executar uma função quando um link é clicado e, concomitantemente, evitar o que navegador carrege uma nova página ao ser clicado. É possível criar uma função que sirva de atalho para esta tarefa repetitiva: 1 2 3 4 5 6 $.fn.extend&#40;&#123;clickPrevented: function&#40;fn&#41; &#123; $&#40;this&#41;.click&#40;function&#40;e&#41; &#123; e.preventDefault&#40;&#41;; fn&#40;e&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>Um padrão recorrente na programação em jQuery é executar uma função quando um link é clicado e, concomitantemente, evitar o que navegador carrege uma nova página ao ser clicado. É possível criar uma função que sirva de atalho para esta tarefa repetitiva:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #6591f7;">fn</span>.<span style="color: #6591f7;">extend</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span>clickPrevented<span style="color: #ffffff;">:</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
	$<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
		e.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		fn<span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A utilização aconteceria mais ou menos assim:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#apenas_um_cara'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">clickPrevented</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
        <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Você vai continuar nesta página após o alert.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/06/22/click-interrompido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>target=&#8221;_blank&#8221; com doctype Strict</title>
		<link>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/</link>
		<comments>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 15:01:21 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=299</guid>
		<description><![CDATA[Se você é fresco como eu ou como a Dani Murai e gosta de codificar suas páginas utilizando doctype strict já sabe que target=&#8221;_blank&#8221; não valida. Particularmente eu sou contra _blank. É consenso entre os gurus de UX deixar a critério do usuário abrir ou não um link em uma nova guia. Mas como muitos [...]]]></description>
			<content:encoded><![CDATA[<p>Se você é fresco como eu ou como a <a href="http://twitter.com/NiaDany">Dani Murai</a> e gosta de codificar suas páginas utilizando <em>doctype strict</em> já sabe que <em>target=&#8221;_blank&#8221;</em> não valida. Particularmente eu sou contra _blank. É consenso entre os gurus de <a href="http://en.wikipedia.org/wiki/User_experience_design">UX</a> deixar a critério do usuário abrir ou não um link em uma nova guia. Mas como muitos clientes não entendem as implicações de forçar este tipo de prática guela abaixo do usuáro, e você é fresco e continua querendo usar strict, a solução é JavaScript:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> href <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">attr</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'href'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    window.<span style="color: red;">open</span><span style="color: #ffffff;">&#40;</span>href<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">false</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Este exemplo em jQuery, se executado, fará com que todos os links desta página sejam abertos em uma nova guia. O <em>return false</em> na linha 4 serve para barrar o evento padrão do link. Se o return for omitido, o destino do link vai ser aberto em uma nova guia <em>e também</em> na página atual.</p>
<h3>preventDefault: uma alternativa mais elegante</h3>
<p>Descobri recentemente o método <em>preventDefault</em> que acaba sendo muito mais prático e menos sujo do que o <em>return false</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>event<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
    event.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> href <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">attr</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'href'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    window.<span style="color: red;">open</span><span style="color: #ffffff;">&#40;</span>href<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Além de fazer muito mais sentido do que o return, <em>preventDefault</em> pode ser colocado em qualquer parte do evento, não interrompendo o fluxo da função.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Sessões em JavaScript</title>
		<link>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/</link>
		<comments>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 00:42:40 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=281</guid>
		<description><![CDATA[É possível fazer sessões em JavaScript? Mais ou menos. Eu sei, isso cheira a gambiarra. Fiquei sabendo desta técnica através deste post. O objeto window tem uma propriedade chamada name. Esta propriedade é raramente utilizada. O interessante é que ela sobrevive à mudanças de páginas: window.name = 'testando'; Se você rodar este exemplo, for para [...]]]></description>
			<content:encoded><![CDATA[<p>É possível fazer sessões em JavaScript? Mais ou menos. Eu sei, isso cheira a gambiarra. Fiquei sabendo desta técnica através deste <a href="http://www.sitepoint.com/blogs/2009/09/02/cookieless-javascript-session-variables/">post</a>. O objeto <em>window</em> tem uma propriedade chamada <em>name</em>. Esta propriedade é raramente utilizada. O interessante é que ela sobrevive à mudanças de páginas:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: red;">name</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'testando'</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Se você rodar este exemplo, for para outra página e inspecionar o conteúdo da propriedade <em>window.name</em> vai perceber que o valor continua sendo <em>testando</em>. Ou seja, esta informação continua guardada, simulando uma sessão.</p>
<p>Infelizmente <em>window.name</em> consegue armazenar somente strings. Em um outro post pretendo demonstrar como podemos <a href="http://en.wikipedia.org/wiki/Serialization">serializar</a> os dados nesta propriedade. Serializando os dados seria possível armazenar qualquer tipo de vetor, objeto ou função. A maioria dos navegadores consegue armazenar até 10Mb de informações na propriedade.</p>
<p>O ideal seria utillizar uma sessão genuína via back-end, utilizando PHP, C#, Java, etc. Mas como todos nós sabemos, às vezes a realizade exige soluções um tanto quanto &#8220;criativas&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Autocomplete e o recorrente problema da acentuação</title>
		<link>http://javascript.singuska.com/2009/12/29/autocomplete-e-o-recorrente-problema-da-acentuacao/</link>
		<comments>http://javascript.singuska.com/2009/12/29/autocomplete-e-o-recorrente-problema-da-acentuacao/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 17:07:01 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=207</guid>
		<description><![CDATA[Todos estes anos trabalhando com desenvolvimento web e eu nunca havia implementado um autocomplete. Após uma rápida busca o candidato óbvio foi o jQuery Autocomplete plugin. A implementação foi tranquila. O autocomplete em questão puxa uma lista de aeroportos de um arquivo JSON. O problema da acentuação Infelizmente o plugin é rígido ao tratar caracteres. [...]]]></description>
			<content:encoded><![CDATA[<p>Todos estes anos trabalhando com desenvolvimento web e eu nunca havia implementado um autocomplete. Após uma rápida busca o candidato óbvio foi o <a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/">jQuery Autocomplete plugin</a>. A implementação foi tranquila. O autocomplete em questão puxa uma lista de aeroportos de um arquivo JSON.</p>
<h3>O problema da acentuação</h3>
<p>Infelizmente o plugin é rígido ao tratar caracteres. O comportamente desejado era que os mesmos resultados fossem devolvidos digitando-se, por exemplo, <em>&#8220;são&#8221;</em> ou <em>&#8220;sao&#8221;</em> (São Paulo e outros resultados apareceriam neste caso). Isso não acontecia. Ao digitar <em>sao</em>, &#8220;São Paulo&#8221; não era um dos resultados. Entretanto, percebi que o plugin não diferenciava caixa alta e baixa: <em>SÃO</em> e <em>são</em> retornam o mesmo resultado.</p>
<h3>A gambiarra</h3>
<p>Modificar plugins é uma péssima prática por vários motivos:</p>
<ul>
<li>um bug pode ser introduzido (e só percebido depois)</li>
<li>se uma nova versão do plugin for lançada, a modificação tem que ser refeita</li>
<li>pior: a modificação pode não funcionar numa nova versão</li>
</ul>
<p>Plugins bem feitos geralmente fornecem formas de personalização do comportamento através de objetos de configuração. Em algumas situações, como no nosso caso, isso não é possível. Vasculhei o código do plugin pelo método <em>toLowerCase</em>  (conversão de caixa alta para caixa baixa):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>177
178
179
180
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">if</span><span style="color: #ffffff;">&#40;</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">result</span>.<span style="color: #6591f7;">toLowerCase</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">==</span> q.<span style="color: #6591f7;">toLowerCase</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    result <span style="color: #ffffff;">=</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">break</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>255
256
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">!</span>options.<span style="color: #6591f7;">matchCase</span><span style="color: #ffffff;">&#41;</span>
    currentValue <span style="color: #ffffff;">=</span> currentValue.<span style="color: #6591f7;">toLowerCase</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Continuei buscando e encontrei ocorrências da conversão em mais cinco ou seis lugares. Então criei um método <em>prototype</em> para o objeto <em>String</em> chamado <em>filterData</em>:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #6591f7;">prototype</span>.<span style="color: #6591f7;">filterData</span> <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span> 
&nbsp;
    <span style="color: #fbde2d; font-weight: bold;">var</span>
    str <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">this</span>.<span style="color: #6591f7;">toLowerCase</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
    specialChars <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span>
        <span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'a'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'áàãâä'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'e'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'éèêë'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'i'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'íìîï'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'o'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'óòõôö'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'u'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'úùûü'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'c'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'ç'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">,</span>
    regex<span style="color: #ffffff;">;</span>
&nbsp;
    <span style="color: #fbde2d; font-weight: bold;">for</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">var</span> i <span style="color: #fbde2d; font-weight: bold;">in</span>  specialChars<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
	regex <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">new</span> RegExp<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'['</span> <span style="color: #ffffff;">+</span> specialChars<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">let</span> <span style="color: #ffffff;">+</span> <span style="color: #61ce3c;">']'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'g'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	str <span style="color: #ffffff;">=</span> str.<span style="color: #6591f7;">replace</span><span style="color: #ffffff;">&#40;</span>regex<span style="color: #ffffff;">,</span> specialChars<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">val</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	regex <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">null</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
&nbsp;
    <span style="color: #fbde2d; font-weight: bold;">return</span> str<span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #bfbfbf; font-style: italic;">// Exemplo de uso</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Isto é um teste. NÃO podemos ter acentos nem CAIXA ALTA!'</span>.<span style="color: #6591f7;">filterData</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Finalmente, para encerrar a gambiarra, substitui no código do plugin todas as ocorrências de <em>toLowerCase</em> para <em>filterData</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>177
178
179
180
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">if</span><span style="color: #ffffff;">&#40;</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">result</span>.<span style="color: #6591f7;">filterData</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">==</span> q.<span style="color: #6591f7;">filterData</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    result <span style="color: #ffffff;">=</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">break</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>255
256
257
258
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">!</span>options.<span style="color: #6591f7;">matchCase</span><span style="color: #ffffff;">&#41;</span>
    currentValue <span style="color: #ffffff;">=</span> currentValue.<span style="color: #6591f7;">filterData</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #bfbfbf; font-style: italic;">// e em todo o resto do plugin</span></pre></td></tr></table></div>

<p>E funciona! Vou tentar entrar em contato com o autor do plugin sugerindo esta funcionalidade para a próxima versão.</p>
<h3>Observação: utilize UTF-8</h3>
<p>Para esta modificação funcionar a página HTML deve ter o seu charset declarado como <em>UTF-8</em>. O charset ISO-8859-1 não funciona. Sei disso porque a página original teve que ser alterada para UTF-8. Com ISO-8859-1 buscas com acentos não retornavam resultado algum. Mistério, não tenho idéia porque isso ocorre.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/29/autocomplete-e-o-recorrente-problema-da-acentuacao/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

