<?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>devness</title>
	<atom:link href="http://devness.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://devness.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 01 Jul 2009 21:41:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</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>Indexed Dropdown with jQuery</title>
		<link>http://devness.com/2009/07/indexed-dropdown-with-jquery/</link>
		<comments>http://devness.com/2009/07/indexed-dropdown-with-jquery/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 19:39:36 +0000</pubDate>
		<dc:creator>dmoena</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[indexed dropdown]]></category>
		<category><![CDATA[select]]></category>

		<guid isPermaLink="false">http://devness.com/?p=132</guid>
		<description><![CDATA[Did you note how difficult is to deal with highly populated dropdowns? More than 50 elements can be a real pain&#8230; Can we do something about it -specially when this &#8220;highly populated dropdown&#8221; is necessary-? Thanks to JavaScript/jQuery the answer is a big yes. How? Take a look to the demo and see which dropdown [...]]]></description>
			<content:encoded><![CDATA[<p>Did you note how difficult is to deal with highly populated dropdowns? More than 50 elements can be a real pain&#8230; Can we do something about it -specially when this &#8220;highly populated dropdown&#8221; is necessary-? Thanks to JavaScript/jQuery the answer is a big yes. How? Take a look to the demo and see which dropdown is more friendly to find&#8230; lets say: Chile.</p>
<h1 style="text-align:center;"><a href="http://devness.com/wp-content/uploads/2009/07/indexed_select.html">Demo</a> <a href="http://devness.com/wp-content/uploads/2009/07/demo.zip">Download</a></h1>
<p><span id="more-132"></span></p>
<h2>Main Structure</h2>
<p>Next image presents our target structure. <b>input</b> and <b>image</b> are the visible elements. <b>content</b> is our options container and <b>index</b>, our indexing element.</p>
<p align="center"><img style="float:none;" title="indexed dropdown elements" src="http://devness.com/wp-content/uploads/2009/07/indexed-dropdown-elements.png" alt="" /></p>
<p>Now, lets code!</p>
<h2>The jQuery Plugin</h2>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>$<span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>$.<span class="me1">fn</span>.<span class="me1">indexedselect</span> = <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p><span class="kw2">var</span> defaults = <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; defaultText: <span class="st0">&quot;Select&#8230;&quot;</span><br />
<span class="br0">&#125;</span>;<br />
<span class="kw2">var</span> opts = $.<span class="me1">extend</span><span class="br0">&#40;</span>defaults,options<span class="br0">&#41;</span>;</p>
<p><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span>jQuery<span class="br0">&#41;</span>;</div>
</div>
<p>Since we want to customize our plugin -just a little bit by now-, we need to define <b>options</b>. We also need to define <b>defaults</b> since <b>options</b> is not mandatory. Finally, we &#8220;merge&#8221; both and save the result into <b>opts</b>.</p>
<p>Then, for each select element we apply&#8230;</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw2">var</span> input = $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;input class=&quot;indexedselect_input&quot; type=&quot;text&quot;/&gt;&#8217;</span><span class="br0">&#41;</span>;<br />
input.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>width:$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">outerWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:<span class="st0">&#8216;20px&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span> + <span class="st0">&#8216;px&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; left:$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">val</span><span class="br0">&#40;</span>opts.<span class="me1">defaultText</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">insertAfter</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>;</p>
<p>input.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.indexedselect&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; indexedselect.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;height&#8217;</span>, index.<span class="me1">outerHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>input<span class="br0">&#41;</span>.<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>input.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>input.<span class="me1">keypress</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</div>
<p>We start by creating <b>input</b>, the visible element, which is in charge of replacing our old dropdown and to show the current selected element.</p>
<p>Since our new element should behave like any dropdown element, we need to simulate this. Our first step into this matter, is to show available options when the new dropdown has the focus. To do this, we simply set the focus event of <b>input</b> to do exactly that.</></p>
<p>Next two events, click and keypress, are there only for consistency -strictly only keypress event is needed-. They are in charge of avoiding any manual edition of the current selected option.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw2">var</span> hidden = $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;input type=&quot;hidden&quot;/&gt;&#8217;</span><span class="br0">&#41;</span>.<span class="me1">insertAfter</span><span class="br0">&#40;</span>input<span class="br0">&#41;</span>;<br />
<span class="kw1">if</span><span class="br0">&#40;</span>$.<span class="me1">trim</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;name&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="st0">&#8221;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; hidden.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;name&#8217;</span>,$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;name&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;name&#8217;</span>,<span class="st0">&#8221;</span><span class="br0">&#41;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Now, we need a way to receive our selected value in our server and this is <b>hidden</b>&#8217;s work. This element takes the name of the original select, so it will be sent as part of our form.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw2">var</span> img = $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;img class=&quot;img&quot; src=&quot;./indexed_select.png&quot;/&gt;&#8217;</span><span class="br0">&#41;</span>.<span class="me1">insertAfter</span><span class="br0">&#40;</span>input<span class="br0">&#41;</span>;<br />
img.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>position:<span class="st0">&#8216;absolute&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; left:<span class="br0">&#40;</span>img.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> &#8211; <span class="nu0">18</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:<span class="br0">&#40;</span>input.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span> + <span class="nu0">1</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>img.<span class="me1">mouseover</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8217;src&#8217;</span>,<span class="st0">&#8216;./indexed_select_hover.png&#8217;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>img.<span class="me1">mouseout</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8217;src&#8217;</span>,<span class="st0">&#8216;./indexed_select.png&#8217;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>img.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!$<span class="br0">&#40;</span>indexedselect<span class="br0">&#41;</span>.<span class="kw1">is</span><span class="br0">&#40;</span><span class="st0">&#8216;:visible&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.indexedselect&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>indexedselect<span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;height&#8217;</span>, indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.index&#8217;</span><span class="br0">&#41;</span>.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>input<span class="br0">&#41;</span>.<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.indexedselect&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</div>
<p>Working again with consistency, <b>img</b> is added to be part of the dropdown element simulation. It acts like any show/hide toggle element when is clicked.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw2">var</span> indexedselect = $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;ul class=&quot;indexedselect&quot;&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;li class=&quot;index&quot;&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;ul&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/ul&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/li&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;li class=&quot;content&quot;&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;ul&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/ul&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/li&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/ul&gt;&#8217;</span><span class="br0">&#41;</span>.<span class="me1">insertAfter</span><span class="br0">&#40;</span>input<span class="br0">&#41;</span>;</div>
</div>
<p>Our options and indexes container is <b>indexedselect</b>. At this moment, we are only defining its internal structure.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw2">var</span> content = indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.content&#8217;</span><span class="br0">&#41;</span>;</p>
<p>content.<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;width&#8217;</span>, $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">outerWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>;</p>
<p>content.<span class="me1">mouseover</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&#8216;hover&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>content.<span class="me1">mouseout</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&#8216;hover&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>content.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; input.<span class="me1">val</span><span class="br0">&#40;</span>String<span class="br0">&#40;</span>$.<span class="me1">trim</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">replace</span><span class="br0">&#40;</span><span class="st0">&#8216;&amp;amp;&#8217;</span>,<span class="st0">&#8216;&amp;&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; hidden.<span class="me1">val</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&#8216;value&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; indexedselect.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</div>
<p><b>content</b> is part of <b>indexedselect</b> and will store the options of the replaced element.</p>
<p>When any option is clicked, we set <b>input</b> equal to the visible value and <b>hidden</b> to the actual selected value -just like would be with any dropdown element-.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw2">var</span> index = indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.index&#8217;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> iul = indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.index ul&#8217;</span><span class="br0">&#41;</span>;<br />
<span class="kw2">var</span> cul = indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.content ul&#8217;</span><span class="br0">&#41;</span>;</p>
<p><span class="kw2">var</span> indexes = Array<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;option&#8217;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> letter = String<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">substring</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!indexes<span class="br0">&#91;</span>letter<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iul.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&#8216;&lt;li&gt;&#8217;</span> + letter + <span class="st0">&#8216;&lt;/li&gt;&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; indexes<span class="br0">&#91;</span>letter<span class="br0">&#93;</span> = letter;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;li&gt;&#8217;</span> + $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;&lt;/li&gt;&#8217;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&#8216;value&#8217;</span>,$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;value&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">appendTo</span><span class="br0">&#40;</span>cul<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>index.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> selectedindex = String<span class="br0">&#40;</span>$.<span class="me1">trim</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; index.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.selectedindex&#8217;</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&#8217;selectedindex&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.selectedindex&#8217;</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&#8217;selectedindex&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&#8217;selectedindex&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;ul li&#8217;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>String<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">substring</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == selectedindex<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&#8217;selectedindex&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> divOffset = content.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> pOffset = $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> pScroll = pOffset &#8211; divOffset &#8211; <span class="nu0">1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">animate</span><span class="br0">&#40;</span><span class="br0">&#123;</span>scrollTop: <span class="st0">&#8216;+=&#8217;</span> + pScroll + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#125;</span>, <span class="nu0">250</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>index.<span class="me1">mouseover</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&#8216;hover&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>index.<span class="me1">mouseout</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&#8216;hover&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>indexedselect.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;top&#8217;</span>, input.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span> + input.<span class="me1">outerHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;left&#8217;</span>, input.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</div>
<p><b>index</b> is our help to highly populated dropdown elements. To initialize this element, we need to go option by option taking its first character. Once we have this character, we check whether is already included or not -this is done by checking the indexes variable-. Only if is not, we add it to the index element.</p>
<p>We want to avoid extra work, right? Well, since we are going option by option we also use this to initialize <b>content</b>. This is done by moving option&#8217;s visible html into <b>content</b> and linking the corresponding value by using jQuery&#8217;s data function. This way, we can set <b>hidden</b> to the correct selected value.</p>
<p>Click event triggers a searching process for the first coincidence with respect to the clicked index -so, is mandatory to order alphabetically all the option elements-. Once the first coincidence is found, we scroll down or up in order to make it visible.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">indexedselect.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;top&#8217;</span>, input.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span> + input.<span class="me1">outerHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;left&#8217;</span>, input.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.indexedselect&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;visibility&#8217;</span>,<span class="st0">&#8216;hidden&#8217;</span><span class="br0">&#41;</span>;</div>
</div>
<p>Finally, some minor things like setting initial position for our new element, setting hide function when we click outside our element and making not visible the initial dropdown -note the use of visibility instead of display. This is necessary to force the invisible element to still fill its space&#8230; try display and you will see-.</p>
<h2>Final comments</h2>
<p>We have made a very simple substitute for any dropdown element, but there is a lot of room for improvement. You can start with validations, for instance. You can also play with its design or reduce the number of limitations -like that all the options needs to be ordered-. Now, is up to you.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>$<span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>$.<span class="me1">fn</span>.<span class="me1">indexedselect</span> = <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> defaults = <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; defaultText: <span class="st0">&quot;Select&#8230;&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> opts = $.<span class="me1">extend</span><span class="br0">&#40;</span>defaults,options<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> input = $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;input class=&quot;indexedselect_input&quot; type=&quot;text&quot;/&gt;&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>width:$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">outerWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height:<span class="st0">&#8216;20px&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span> + <span class="st0">&#8216;px&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; left:$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">val</span><span class="br0">&#40;</span>opts.<span class="me1">defaultText</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">insertAfter</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.indexedselect&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; indexedselect.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;height&#8217;</span>, index.<span class="me1">outerHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>input<span class="br0">&#41;</span>.<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input.<span class="me1">keypress</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> hidden = $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;input type=&quot;hidden&quot;/&gt;&#8217;</span><span class="br0">&#41;</span>.<span class="me1">insertAfter</span><span class="br0">&#40;</span>input<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$.<span class="me1">trim</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;name&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> != <span class="st0">&#8221;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hidden.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;name&#8217;</span>,$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;name&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;name&#8217;</span>,<span class="st0">&#8221;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> img = $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;img class=&quot;img&quot; src=&quot;./indexed_select.png&quot;/&gt;&#8217;</span><span class="br0">&#41;</span>.<span class="me1">insertAfter</span><span class="br0">&#40;</span>input<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img.<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>position:<span class="st0">&#8216;absolute&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; left:<span class="br0">&#40;</span>img.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> &#8211; <span class="nu0">18</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; top:<span class="br0">&#40;</span>input.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span> + <span class="nu0">1</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img.<span class="me1">mouseover</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8217;src&#8217;</span>,<span class="st0">&#8216;./indexed_select_hover.png&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img.<span class="me1">mouseout</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8217;src&#8217;</span>,<span class="st0">&#8216;./indexed_select.png&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!$<span class="br0">&#40;</span>indexedselect<span class="br0">&#41;</span>.<span class="kw1">is</span><span class="br0">&#40;</span><span class="st0">&#8216;:visible&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.indexedselect&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>indexedselect<span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;height&#8217;</span>, indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.index&#8217;</span><span class="br0">&#41;</span>.<span class="me1">height</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>input<span class="br0">&#41;</span>.<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.indexedselect&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> indexedselect = $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;ul class=&quot;indexedselect&quot;&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;li class=&quot;index&quot;&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;ul&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/ul&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/li&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;li class=&quot;content&quot;&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;ul&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/ul&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/li&gt;&#8217;</span> +<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#8216;&lt;/ul&gt;&#8217;</span><span class="br0">&#41;</span>.<span class="me1">insertAfter</span><span class="br0">&#40;</span>input<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> content = indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.content&#8217;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;width&#8217;</span>, $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">outerWidth</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">mouseover</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&#8216;hover&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">mouseout</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&#8216;hover&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; input.<span class="me1">val</span><span class="br0">&#40;</span>String<span class="br0">&#40;</span>$.<span class="me1">trim</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">replace</span><span class="br0">&#40;</span><span class="st0">&#8216;&amp;amp;&#8217;</span>,<span class="st0">&#8216;&amp;&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hidden.<span class="me1">val</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&#8216;value&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; indexedselect.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>; </p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> index = indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.index&#8217;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> iul = indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.index ul&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> cul = indexedselect.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.content ul&#8217;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> indexes = Array<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;option&#8217;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> letter = String<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">substring</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!indexes<span class="br0">&#91;</span>letter<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iul.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&#8216;&lt;li&gt;&#8217;</span> + letter + <span class="st0">&#8216;&lt;/li&gt;&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; indexes<span class="br0">&#91;</span>letter<span class="br0">&#93;</span> = letter;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;&lt;li&gt;&#8217;</span> + $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;&lt;/li&gt;&#8217;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&#8216;value&#8217;</span>,$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&#8216;value&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">appendTo</span><span class="br0">&#40;</span>cul<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> selectedindex = String<span class="br0">&#40;</span>$.<span class="me1">trim</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.selectedindex&#8217;</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&#8217;selectedindex&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;.selectedindex&#8217;</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&#8217;selectedindex&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&#8217;selectedindex&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&#8216;ul li&#8217;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>String<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">substring</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">1</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == selectedindex<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&#8217;selectedindex&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> divOffset = content.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> pOffset = $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">offset</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> pScroll = pOffset &#8211; divOffset &#8211; <span class="nu0">1</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; content.<span class="me1">animate</span><span class="br0">&#40;</span><span class="br0">&#123;</span>scrollTop: <span class="st0">&#8216;+=&#8217;</span> + pScroll + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#125;</span>, <span class="nu0">250</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index.<span class="me1">mouseover</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&#8216;hover&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index.<span class="me1">mouseout</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>e.<span class="me1">target</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&#8216;hover&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; indexedselect.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;top&#8217;</span>, input.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">top</span> + input.<span class="me1">outerHeight</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;left&#8217;</span>, input.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> + <span class="st0">&#8216;px&#8217;</span><span class="br0">&#41;</span>.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;.indexedselect&#8217;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&#8216;visibility&#8217;</span>,<span class="st0">&#8216;hidden&#8217;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span>;</p>
<p><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span>jQuery<span class="br0">&#41;</span>;</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://devness.com/2009/07/indexed-dropdown-with-jquery/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Playing with Sprites and jQuery: animated menu</title>
		<link>http://devness.com/2009/06/playing-with-sprites-and-jquery-animated-menu/</link>
		<comments>http://devness.com/2009/06/playing-with-sprites-and-jquery-animated-menu/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 14:09:42 +0000</pubDate>
		<dc:creator>dmoena</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[web design]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[sprites]]></category>

		<guid isPermaLink="false">http://devness.com/?p=54</guid>
		<description><![CDATA[Sprites are widely used on big sites (Yahoo!, Google, Amazon and more) but rarely for &#8220;normal&#8221; projects. I think this is due to two questions that usually stop us when it comes to learn something new: &#8220;how difficult will be to learn this thing?&#8221; and &#8220;will I even use it?&#8221;. Well, I hope to help [...]]]></description>
			<content:encoded><![CDATA[<p>Sprites are widely used on big sites (Yahoo!, Google, Amazon and more) but rarely for &#8220;normal&#8221; projects. I think this is due to two questions that usually stop us when it comes to learn something new: &#8220;how difficult will be to learn this thing?&#8221; and &#8220;will I even use it?&#8221;. Well, I hope to help you with both questions by showing you how easy is to work with sprites/jQuery and how much this would help you to make a difference in your work, for instance by making a nice animated menu like this one:</p>
<p><script type="text/javascript" src="http://devness.com/wp-content/uploads/2009/06/animatedmenudemo.js"></script></p>
<link rel="stylesheet" href="http://devness.com/wp-content/uploads/2009/06/animatedmenudemo.css" type="text/css" media="screen" />
<style>
.item {
    padding:1px;
}
</style>
<div>
<div class="item">
<div id="parent" class="object"></div>
<div id="parentmask" class="mask"></div>
<p>             <a href="#" rel="var xr=20; var xl=6.6;" style="position:absolute;margin-top:-8px">Parents</a>
</div>
<div class="item">
<div id="girl" class="object"></div>
<div id="girlmask" class="mask"></div>
<p>	<a href="#" rel="var xr=47.5; var xl=33;" style="position:absolute;margin-top:-8px">Girls</a>
</div>
<div class="item">
<div id="boy" class="object"></div>
<div id="boymask" class="mask"></div>
<p>	<a href="#" style="position:absolute;margin-top:-8px">Boys</a>
</div>
<div class="item">
<div id="kid" class="object"></div>
<div id="kidmask" class="mask"></div>
<p>	<a href="#" style="position:absolute;margin-top:-8px">Kids</a>
</div>
</div>
<p><span id="more-54"></span></p>
<h2>Our goal</h2>
<p>We want to build an animated menu based on sprites just like previous one. In particular, we will use animated elements to make a more attractive menu, but without using flash or another technology different from JavaScript (jQuery in particular), one image file (otherwise wouldn&#8217;t justify use ) and a calculator.</p>
<h2>Simulating movement</h2>
<p><img class="alignleft" title="steps" src="http://devness.com/wp-content/uploads/2009/06/steps.gif" alt="" /> At the sample menu we can see our tiny people running when you put the mouse pointer over their &#8220;action zone&#8221;. This is accomplished just like any animated image: switching from one image to another and repeating this cycle as long as our character must to run.</p>
<p>In this case we use 4 steps, each one with its respective image (actually we can use only 3 images since we need to repeat one of them during the cycle). Now, lets take this to the sprites world.</p>
<h2>Locating an element over the sprite</h2>
<p>Working with sprites means that we need to know where is every element related to our animation, but in terms of %.</p>
<p>To calculate this as an approximation, we need to know the image&#8217;s width and where our target starts. With this two numbers, we just need to apply simple math to get what we want. </p>
<p><img class="alignleft" title="steps" src="http://devness.com/wp-content/uploads/2009/06/location.gif" alt="" />Previous image is 183 pixels width and second step starts at pixel number 57. So, we should be using approximately 31.15% (57/183 = 0.3115) for every instance of second step (we will probably need to adjust this value a little).</p>
<p><br/><br />
<img class="alignleft" title="steps" src="http://devness.com/wp-content/uploads/2009/06/people.gif" alt="" />By the way, take into account that you can use images as big as this one and even use some subsets (not recommended if you want to save bandwidth). I will leave this image that big so you can play with it.</p>
<h2>Masking</h2>
<p><img class="alignleft" title="steps" src="http://devness.com/wp-content/uploads/2009/06/masking.gif" alt="" />Sprites is all about showing only what you need to show and this is done by masking or hiding what you don&#8217;t want to show. In other words, you need to know the size of every element in order to force it. In this case we can use a 13 x 20 pixels rectangle to show only one frame.</p>
<h2>CSS + HTML</h2>
<p>We can do the first part of our menu by using CSS+HTML and by &#8220;first part&#8221; I mean the static one. By using HTML we set the main structure, consisting of 3 div elements (one main container, one for masking and one for the animated element) and one a (hyperlink) element.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">&quot;item&quot;</span><span class="kw2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">id</span>=<span class="st0">&quot;doctor&quot;</span> <span class="kw3">class</span>=<span class="st0">&quot;object&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">id</span>=<span class="st0">&quot;doctormask&quot;</span> <span class="kw3">class</span>=<span class="st0">&quot;mask&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">&quot;#&quot;</span><span class="kw2">&gt;</span></span>Parents<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">&quot;item&quot;</span><span class="kw2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">id</span>=<span class="st0">&quot;girl&quot;</span> <span class="kw3">class</span>=<span class="st0">&quot;object&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">id</span>=<span class="st0">&quot;girlmask&quot;</span> <span class="kw3">class</span>=<span class="st0">&quot;mask&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">&quot;#&quot;</span><span class="kw2">&gt;</span></span>Geirls<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">&quot;item&quot;</span><span class="kw2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">id</span>=<span class="st0">&quot;boy&quot;</span> <span class="kw3">class</span>=<span class="st0">&quot;object&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">id</span>=<span class="st0">&quot;boymask&quot;</span> <span class="kw3">class</span>=<span class="st0">&quot;mask&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">&quot;#&quot;</span><span class="kw2">&gt;</span></span>Boys<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
<span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">class</span>=<span class="st0">&quot;item&quot;</span><span class="kw2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">id</span>=<span class="st0">&quot;kid&quot;</span> <span class="kw3">class</span>=<span class="st0">&quot;object&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/div.html"><span class="kw2">&lt;div</span></a> <span class="kw3">id</span>=<span class="st0">&quot;kidmask&quot;</span> <span class="kw3">class</span>=<span class="st0">&quot;mask&quot;</span><span class="kw2">&gt;</span></span><span class="sc2"><span class="kw2">&lt;/div&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2"><a href="http://december.com/html/4/element/a.html"><span class="kw2">&lt;a</span></a> <span class="kw3">href</span>=<span class="st0">&quot;#&quot;</span><span class="kw2">&gt;</span></span>Kids<span class="sc2"><span class="kw2">&lt;/a&gt;</span></span><br />
<span class="sc2"><span class="kw2">&lt;/div&gt;</span></span></div>
</div>
<p>CSS code let us set initial positions for every animated element and its respective mask. Also, each container is set according to our needs.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">body <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">background</span>:<span class="re0">#eeeeee</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re0">#parent</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">14px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; background<span class="re2">:url</span><span class="br0">&#40;</span>people<span class="re1">.gif</span><span class="br0">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; background-position<span class="re2">:<span class="nu0">0</span></span>% <span class="re3"><span class="nu0">0</span>%</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; border<span class="re2">:none</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position<span class="re2">:absolute</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; z-index<span class="re2">:<span class="nu0">10</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re0">#parentmask</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">background</span>:<span class="re0">#ffffff</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">120px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position<span class="re2">:absolute</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; z-index<span class="re2">:<span class="nu0">1</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; margin-left<span class="re2">:<span class="re3">8px</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re0">#girl</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">16px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; background<span class="re2">:url</span><span class="br0">&#40;</span>people<span class="re1">.gif</span><span class="br0">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; background-position<span class="re2">:<span class="nu0">27</span></span><span class="re1">.<span class="nu0">2</span></span>% <span class="re3"><span class="nu0">0</span>%</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; border<span class="re2">:none</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position<span class="re2">:absolute</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; z-index<span class="re2">:<span class="nu0">10</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re0">#girlmask</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">background</span>:<span class="re0">#ffffff</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">120px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position<span class="re2">:absolute</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; z-index<span class="re2">:<span class="nu0">1</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; margin-left<span class="re2">:<span class="re3">8px</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re0">#boy</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">16px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; background<span class="re2">:url</span><span class="br0">&#40;</span>people<span class="re1">.gif</span><span class="br0">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; background-position<span class="re2">:<span class="nu0">53</span></span><span class="re1">.<span class="nu0">8</span></span>% <span class="re3"><span class="nu0">0</span>%</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; border<span class="re2">:none</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position<span class="re2">:absolute</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; z-index<span class="re2">:<span class="nu0">10</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re0">#boymask</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">background</span>:<span class="re0">#ffffff</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">120px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position<span class="re2">:absolute</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; z-index<span class="re2">:<span class="nu0">1</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; margin-left<span class="re2">:<span class="re3">8px</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re0">#kid</span> <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">16px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; background<span class="re2">:url</span><span class="br0">&#40;</span>people<span class="re1">.gif</span><span class="br0">&#41;</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; background-position<span class="re2">:<span class="nu0">79</span></span><span class="re1">.<span class="nu0">9</span></span>% <span class="re3"><span class="nu0">0</span>%</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; border<span class="re2">:none</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position<span class="re2">:absolute</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; z-index<span class="re2">:<span class="nu0">10</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re0">#kidmask</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">background</span>:<span class="re0">#ffffff</span>; <br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">120px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; position<span class="re2">:absolute</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; z-index<span class="re2">:<span class="nu0">1</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; margin-left<span class="re2">:<span class="re3">8px</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re1">.item</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">background</span>:<span class="re0">#cccccc</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; width<span class="re2">:<span class="re3">128px</span></span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; height<span class="re2">:<span class="re3">20px</span></span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re1">.item</span> a <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; margin-left<span class="re2">:<span class="re3">20px</span></span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p><img class="alignleft" title="steps" src="http://devness.com/wp-content/uploads/2009/06/static.gif" alt="" />Lets take a look to the #boy element, which tell us that its size is 16&#215;20 pixels, share its background image with the other elements (people.gif, otherwise there is no point to use sprites&#8230;) and that we want to show starts at 53.8% from the left side and at 0% starting at the top of the image. The same is valid for any other element.</p>
<p>As a result of this CSS+HTML code, we get something like this, which is nice, but pretty boring.</p>
<h2>jQuery</h2>
<p>First thing I did, was to create some control variables that allow me to map each element with its respective background position and to keep control of the animation process (lie! some variables were created as needed&#8230; but I&#8217;ll ignore this for educational purposes), and also a couple of utility functions.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw2">var</span> foot = <span class="br0">&#91;</span><span class="nu0">50</span>,<span class="nu0">0</span>,<span class="nu0">100</span>,<span class="nu0">0</span><span class="br0">&#93;</span>;<br />
<span class="kw2">var</span> step = <span class="nu0">12</span>;<br />
<span class="kw2">var</span> sleeptime = <span class="nu0">70</span>;<br />
<span class="kw2">var</span> mapping = Array<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
mapping<span class="br0">&#91;</span><span class="st0">&quot;parent&quot;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span> xr:<span class="nu0">20</span>, xl:<span class="nu0">6.6</span>, np:<span class="st0">&quot;0% 0%&quot;</span> <span class="br0">&#125;</span>;<br />
mapping<span class="br0">&#91;</span><span class="st0">&quot;girl&quot;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span> xr:<span class="nu0">47.5</span>, xl:<span class="nu0">33</span>, np:<span class="st0">&quot;27.2% 0%&quot;</span> <span class="br0">&#125;</span>;<br />
mapping<span class="br0">&#91;</span><span class="st0">&quot;boy&quot;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span> xr:<span class="nu0">74</span>, xl:<span class="nu0">60.4</span>, np:<span class="st0">&quot;53.8% 0%&quot;</span> <span class="br0">&#125;</span>;<br />
mapping<span class="br0">&#91;</span><span class="st0">&quot;kid&quot;</span><span class="br0">&#93;</span> = <span class="br0">&#123;</span> xr:<span class="nu0">100</span>, xl:<span class="nu0">87</span>, np:<span class="st0">&quot;79.9% 0%&quot;</span> <span class="br0">&#125;</span>;</p>
<p>px = <span class="kw2">function</span><span class="br0">&#40;</span>val<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> String<span class="br0">&#40;</span>val<span class="br0">&#41;</span>+<span class="st0">&quot;px&quot;</span>;<br />
<span class="br0">&#125;</span></p>
<p>mpx = <span class="kw2">function</span><span class="br0">&#40;</span>val<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>val == <span class="st0">&quot;auto&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> Number<span class="br0">&#40;</span>String<span class="br0">&#40;</span>val<span class="br0">&#41;</span>.<span class="me1">substring</span><span class="br0">&#40;</span><span class="nu0">0</span>,String<span class="br0">&#40;</span>val<span class="br0">&#41;</span>.<span class="me1">length</span> &#8211; <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>Since we have all these figures horizontally aligned, we use &#8220;foot&#8221; as a common variable to set vertical position of each step while running. For instance, first step is at the middle of the image (50%) and second step is on top of the image (0%) moving from top to bottom.</p>
<p>&#8220;step&#8221; means that we will move our elements at a rate of 12 pixels and waiting 70 miliseconds (sleeptime). &#8220;px&#8221; and &#8220;mpx&#8221; are just to add or remove the string &#8220;px&#8221; of a given argument.</p>
<p>Now, the fun part: animating this menu, which is done by using the next code</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;.item&quot;</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.mask&quot;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;opacity&quot;</span>,<span class="st0">&quot;0.8&quot;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; move = <span class="kw2">function</span><span class="br0">&#40;</span>el,elmask<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> newleft;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;direction&quot;</span><span class="br0">&#41;</span> == <span class="st0">&quot;R&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> &gt;= $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">parent</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;background-position&quot;</span>, mapping<span class="br0">&#91;</span>$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>.<span class="me1">np</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;isMoving&quot;</span>,<span class="kw2">false</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newleft = $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> + step;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newwidth = $<span class="br0">&#40;</span>elmask<span class="br0">&#41;</span>.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &#8211; step;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newwidth = <span class="br0">&#40;</span>newwidth &lt; <span class="nu0">0</span><span class="br0">&#41;</span>?<span class="nu0">0</span>:newwidth;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> &lt;= step<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;background-position&quot;</span>, mapping<span class="br0">&#91;</span>$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>.<span class="me1">np</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;isMoving&quot;</span>,<span class="kw2">false</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newleft = $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">position</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">left</span> &#8211; step;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newwidth = $<span class="br0">&#40;</span>elmask<span class="br0">&#41;</span>.<span class="me1">width</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + step;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;index&quot;</span><span class="br0">&#41;</span> == <span class="nu0">4</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;index&quot;</span>,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> y = foot<span class="br0">&#91;</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;index&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;index&quot;</span>,<span class="br0">&#40;</span>$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;index&quot;</span><span class="br0">&#41;</span><span class="nu0">+1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;background-position&quot;</span>,$<span class="br0">&#40;</span>el<span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;x&quot;</span><span class="br0">&#41;</span>+<span class="st0">&quot;% &quot;</span>+y+<span class="st0">&quot;%&quot;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;left&quot;</span>,px<span class="br0">&#40;</span>newleft<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>elmask<span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;left&quot;</span>,px<span class="br0">&#40;</span>newleft<span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">css</span><span class="br0">&#40;</span><span class="st0">&quot;width&quot;</span>,px<span class="br0">&#40;</span>newwidth<span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setTimeout<span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> move<span class="br0">&#40;</span>el,elmask<span class="br0">&#41;</span>; <span class="br0">&#125;</span>,sleeptime<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;.item&quot;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.object&quot;</span><span class="br0">&#41;</span>.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;isMoving&quot;</span>,<span class="kw2">false</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;.item&quot;</span><span class="br0">&#41;</span>.<span class="me1">mouseenter</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> obj = $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.object&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">eval</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;a&quot;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;rel&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;x&quot;</span>,mapping<span class="br0">&#91;</span>obj.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>.<span class="me1">xr</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;index&quot;</span>,<span class="nu0">0</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;direction&quot;</span>,<span class="st0">&quot;R&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;isMoving&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;isMoving&quot;</span>,<span class="kw2">true</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move<span class="br0">&#40;</span>obj.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>,$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.mask&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;.item&quot;</span><span class="br0">&#41;</span>.<span class="me1">mouseleave</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> obj = $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.object&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">eval</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;a&quot;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;rel&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;x&quot;</span>,mapping<span class="br0">&#91;</span>obj.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>.<span class="me1">xl</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;direction&quot;</span>,<span class="st0">&quot;L&quot;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!obj.<span class="me1">data</span><span class="br0">&#40;</span><span class="st0">&quot;isMoving&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; move<span class="br0">&#40;</span>obj.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>,$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.mask&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</div>
<p>From top to bottom, we set each mask to have an opacity of 80% (0.8). Then we define the &#8220;move&#8221; function, which takes and element and its corresponding mask, and move then according to its information contained on jQuery &#8220;data&#8221; container.</p>
<p>Later, we set the &#8220;isMoving&#8221; to false for every element, since there is no initial movement.</p>
<p>&#8220;mouseenter&#8221; sets all context variables to indicate movement to the right and then calls &#8220;move&#8221; function. &#8220;mouseleave&#8221; do the opposite.</p>
<p>Note that there is two ways to stop movement: when direction has change and when an element reaches any boundary (starting or ending of the respective item element).</p>
<h2>Done!</h2>
<p>We are done! We just have created an animated menu using sprites. Not too difficult, right? Then we have answer our first question: &#8220;how difficult will be to learn this thing?&#8221; Not too much.</p>
<p>For the second question, &#8220;will I even use it?&#8221; the answer would be a big yes. Why? As you can see, doing this kind of elements can help you to create more interactive and attractive elements (not using flash at all, which is a good thing). Plus, you can create lots of more interesting stuff. Just use your imagination.</p>
<h2>Improvements</h2>
<p>There is a lot of room for improvement, starting with the animation process and ending with whatever you think can -or must- to be improved. If you have some instereting, it will probably interesting for all of us, so let us know :)</p>
<h2>Download</h2>
<p>If you want to experiment with this menu, you can download a <a href="http://devness.com/wp-content/uploads/2009/06/animated-menu-demo.rar">working demo</a>.</p>
<h2>Credits</h2>
<p>The tiny people you see running was taken from <a href="http://gmc.yoyogames.com/lofiversion/index.php/t307986.html">this post</a>, but saw first at <a href="http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/">this post</a> while I was doing some research.</p>
]]></content:encoded>
			<wfw:commentRss>http://devness.com/2009/06/playing-with-sprites-and-jquery-animated-menu/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Forcing Letter Case with CSS and jQuery</title>
		<link>http://devness.com/2009/06/forcing-letter-case-with-css-and-jquery/</link>
		<comments>http://devness.com/2009/06/forcing-letter-case-with-css-and-jquery/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 21:49:33 +0000</pubDate>
		<dc:creator>dmoena</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[force letter case]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[lower case]]></category>
		<category><![CDATA[upper case]]></category>

		<guid isPermaLink="false">http://devness.com/?p=45</guid>
		<description><![CDATA[
.upper {text-transform:uppercase;} .lower {text-transform:lowercase;} 
Try this two forms. Both force letter case, but only one of them will send to the server exactly what you see (in terms of lower and upper case).










See? Now, let me explain what just happen and how to avoid the first situation.

Explanation
In each form we just force letter casing by [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript" src="http://devness.com/wp-content/uploads/2009/06/casingdemo.js"></script></p>
<style>.upper {text-transform:uppercase;} .lower {text-transform:lowercase;} </style>
<p>Try this two forms. Both force letter case, but only one of them will send to the server exactly what you see (in terms of lower and upper case).</p>
<form id="nocaseform">
<input type="text" class="upper" name="upper"/>
<input type="text" class="lower" name="lower"/>
<input type="submit" value="Non-cased Form"/>
</form>
<form id="caseform">
<input type="text" class="upper" name="upper"/>
<input type="text" class="lower" name="lower"/>
<input type="submit" value="Cased Form"/>
</form>
<p>See? Now, let me explain what just happen and how to avoid the first situation.</p>
<p><span id="more-45"></span></p>
<h2>Explanation</h2>
<p>In each form we just force letter casing by using CSS. In this case, inputs with the &#8220;upper&#8221; class will be upper cased and those with the &#8220;lower&#8221; class will be lower cased.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="re1">.upper</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; text-transform<span class="re2">:uppercase</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="re1">.lower</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; text-transform<span class="re2">:lowercase</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>The problem is that we get only the impression of lower and/or upper case, but we will actually send data cased as the user has entered. This means that even when you see &#8220;ABCD&#8221; you could actually receive &#8220;aBCd&#8221; at the server. I know, is not a big deal since you can (and should) force casing at server side, but sometimes you just want to be sure that your data is sent with the propper format.</p>
<h2>A solution</h2>
<p>So, how to solve this? jQuery (jQuery makes this easier, but you can use plain JavaScript too). You just need to add this code (plus the previous CSS one) to intercept any form submit, force propper and effective data casing and then continue with the sumbit process.</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">&lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;form&quot;</span><span class="br0">&#41;</span>.<span class="me1">submit</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.upper&quot;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span>String<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">toUpperCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.lower&quot;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span>String<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">val</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;<br />
&lt;/script&gt;</div>
</div>
<p>Simple, but useful in case you are working with casing.</p>
]]></content:encoded>
			<wfw:commentRss>http://devness.com/2009/06/forcing-letter-case-with-css-and-jquery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Livegets: update any WordPress Widget in real time</title>
		<link>http://devness.com/2009/06/livegets-update-any-wordpress-widget-in-real-time/</link>
		<comments>http://devness.com/2009/06/livegets-update-any-wordpress-widget-in-real-time/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 21:43:54 +0000</pubDate>
		<dc:creator>dmoena</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Livegets]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[real time widgets]]></category>

		<guid isPermaLink="false">http://devness.com/?p=34</guid>
		<description><![CDATA[
hello world! -not too original, but I had to do it- Let me tell you about Livegets. What is it? Well, Livegets is a Worpress plugin for enabling real time updates for any Wordpress widget. Any widget? Any.
Why? Because real time widget update would be useful for visitors to know what is happening at any [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="wordpress-logo" src="http://devness.com/wp-content/uploads/2009/06/wordpress-logo.gif" alt="wordpress-logo" width="200" height="200" /></p>
<p>hello world! -not too original, but I had to do it- Let me tell you about Livegets. What is it? Well, Livegets is a Worpress plugin for enabling real time updates for any Wordpress widget. Any widget? Any.</p>
<p>Why? Because real time widget update would be useful for visitors to know what is happening at any time in your blog.</p>
<p>Picture this: a visitor is reading an specific post at your site and you add a new one. Without Livegets, your visitor will probably leave the site if the current post is the lastest at the time he/she arrives. Now, with Livegets he/she will know there is a new post and will probably visit it.</p>
<p>Another example? Think about a &#8220;Top 10 Something&#8221; widget. Would be great to offer real time updates, don&#8217;t you think?</p>
<p><span id="more-34"></span></p>
<h2 style="clear:both;padding-top:2px;">Installation</h2>
<p>Livegets installation is divided into two steps: plugin installation as any other plugin and an small modification of a Wordpress core file&#8230; I know it sounds painfull, but is really simple.</p>
<p>Lets start with the &#8220;core&#8221; part. For this, we need to modify just one file ir order to fully integrate Livegets to your Wordpress installation. The file we need to edit is located into wp-includes and it&#8217;s named &#8220;widgets.php&#8221;.</p>
<p>Its modification is pretty simple: just locate dynamic_sidebar function (around line 433 for Wordpress 2.7.1 and 808 for 2.8) inside of &#8220;widgets.php&#8221; and find this code (line 477 and 855 respectively)</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/is_callable"><span class="kw3">is_callable</span></a><span class="br0">&#40;</span><span class="re0">$callback</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/call_user_func_array"><span class="kw3">call_user_func_array</span></a><span class="br0">&#40;</span><span class="re0">$callback</span>, <span class="re0">$params</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="re0">$did_one</span> = <span class="kw2">true</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>once you have it, change the previous code for this one</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;"><span class="re0">$widgets</span> = <a href="http://www.php.net/explode"><span class="kw3">explode</span></a><span class="br0">&#40;</span><span class="st0">&quot;,&quot;</span>,get_option<span class="br0">&#40;</span><span class="st0">&quot;livegets&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/is_callable"><span class="kw3">is_callable</span></a><span class="br0">&#40;</span><span class="re0">$callback</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/in_array"><span class="kw3">in_array</span></a><span class="br0">&#40;</span><span class="re0">$id</span>,<span class="re0">$widgets</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="kw2">?&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt; widgets.push<span class="br0">&#40;</span><span class="st0">&quot;&lt;?php echo $id; ?&gt;&quot;</span><span class="br0">&#41;</span>; <span class="kw2">&lt;/script&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;script type=<span class="st0">&quot;text/javascript&quot;</span>&gt; widgets_name<span class="br0">&#91;</span><span class="st0">&quot;&lt;?php echo $id; ?&gt;&quot;</span><span class="br0">&#93;</span> = <span class="st0">&quot;&lt;?php echo get_option($id.&quot;</span>_updated_text<span class="st0">&quot;); ?&gt;&quot;</span>; <span class="kw2">&lt;/script&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span id=<span class="st0">&quot;&lt;?php echo $id; ?&gt;&quot;</span>&gt;&lt;?php<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/call_user_func_array"><span class="kw3">call_user_func_array</span></a><span class="br0">&#40;</span><span class="re0">$callback</span>, <span class="re0">$params</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/in_array"><span class="kw3">in_array</span></a><span class="br0">&#40;</span><span class="re0">$id</span>,<span class="re0">$widgets</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span> <span class="kw2">?&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/span&gt;&lt;?php<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$did_one</span> = <span class="kw2">true</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p><img class="alignleft" style="margin-bottom:16px" title="livegets_config" src="http://devness.com/wp-content/uploads/2009/06/livegets_config.png" alt="Livegets Config" width="145" height="229" /></p>
<p>Plugin installation is like the usual thing: decompress livegets into the Wordpress&#8217; plugin directory. Just be sure the final plugin route is like &#8220;&#8230;/plugins/livegets/livegets.php&#8221;.</p>
<p>Once activated, you will see Livegets Configuration options as part of Wordpress&#8217; Settings, just like in the example image.</p>
<p>We are done! Now you just need to select the widgets that will be real time widegts or  Livegets and fill its updated text if you want it. After that, Livegets plugin and jQuery will do the rest.</p>
<p>Oh, one more thing! Choose only those widgets which worth to make Livegets, that means, those that reports some kind of &#8220;last activity&#8221; &#8211; last comments, last posts&#8230; &#8211; otherwise, you will be stressing out your server and bandwith for no reason.</p>
<h2 style="clear:both;padding-top:12px;">Demo</h2>
<p>You can simulate an update for the &#8220;Recent Posts&#8221; widget by clicking right <a href="#" id="livegets_demo">here</a>. What you see -or will see- is only a <a href="http://www.stanlemon.net/projects/jgrowl.html">jGrowl notification</a>, but when it happens for real, you can see the widget actually updated and you are enable to visit the new event(s) if you want to.<br />
<script type="text/javascript"> 
$(document).ready(function(){
    $('#livegets_demo').click(function(){
        $.jGrowl('<a href="#recent-posts-3">New post added</a>');
        return false;
    });
});
</script></p>
<h2 style="clear:both;padding-top:12px;">Restrictions</h2>
<p>At this time, I found problems with themes where widget&#8217;s content is manipulated after being sent. For instance, when you use JavaScript to create rounded corners. So, check this before you use it.</p>
<h2>Download</h2>
<p>You can download this plugin <a href="http://devness.com/wp-content/uploads/2009/06/livegets.rar">right here</a>.</p>
<h2>Finally</h2>
<p>If you find any kind of error, please let me know. The better way is probably by leaving a comment&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://devness.com/2009/06/livegets-update-any-wordpress-widget-in-real-time/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
