<?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>Steve Reynolds Blog &#187; jQuery</title>
	<atom:link href="http://www.reynoldsftw.com/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.reynoldsftw.com</link>
	<description>Being Generalist.</description>
	<lastBuildDate>Wed, 28 Jul 2010 20:36:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Twitter API calls in the browser with JSON and jQuery</title>
		<link>http://www.reynoldsftw.com/2009/12/twitter-api-calls-in-the-browser-with-json-and-jquery/</link>
		<comments>http://www.reynoldsftw.com/2009/12/twitter-api-calls-in-the-browser-with-json-and-jquery/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 13:00:43 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[JSONP]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1617</guid>
		<description><![CDATA[
			
				
			
		
Ajax is a wonderful technology that is heavily used in many places nowdays. Ajax is run in the browser using javascript to call a URL, and usually receive data back. One of the key restrictions of using Ajax to get data from a remote URL is that you cannot make cross-domain calls. This meaning, you [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F12%2Ftwitter-api-calls-in-the-browser-with-json-and-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F12%2Ftwitter-api-calls-in-the-browser-with-json-and-jquery%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Ajax is a wonderful technology that is heavily used in many places nowdays. Ajax is run in the browser using javascript to call a URL, and usually receive data back. One of the key restrictions of using Ajax to get data from a remote URL is that you cannot make cross-domain calls. This meaning, you cannot make an ajax call to domain1.com from domain2.com because of browser security restrictions. The workaround, is to make the cross domain ajax calls from your web server rather than the browser, and all is fine!</p>
<p>That was, until the introduction of JSON, and more importantly JSONP which allows you to make ajax calls to 3rd party domains from within the browser itself. What this means for you is that you can get data from JSONP supported APIs from within the browser itself, rather than telling your web server to do it for you.</p>
<p><span id="more-1617"></span><img class="aligncenter size-full wp-image-953" title="twitter" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/twitter.jpg" alt="twitter" width="374" height="100" /></p>
<p>This is also important for <strong>Twitter API</strong> usage. One of the key restrictions with the Twitter API is that any client IP address can only make x number of API calls per hour. If you&#8217;re making these API calls from your web server (which obviously only a static IP address), you could quickly use up your hourly allocation on a busy site. Twitter does allow you to &#8220;whitelist&#8221; your web application to give you a better hourly rate, but here&#8217;s a better way:</p>
<p>Use the clients, ie your users, to make the API calls from their browsers.</p>
<p>Admittedly, my example below is for any API calls that do not require authentication, however what it does enable you to do is to empower your user to make Twitter API calls in the browser using jQuery. So without further ado, here&#8217;s the code snippet:</p>
<pre class="brush: jscript;">$.getJSON(&quot;http://twitter.com/statuses/user_timeline.json?screen_name=SteveReynolds&amp;callback=?&quot;,

function(data){

$.each(data, function(i,item){
$(&quot;#tweets&quot;).append(item.text + &quot;&lt;BR/&gt;&quot;);

});

});
</pre>
<p>What the code above assumes is that you have a &lt;div id=&#8221;tweets&#8221;&gt; or something where you can append the results, in this case the object in the JSON response &#8220;item.text&#8221; which is the tweet itself. You could for example, get &#8220;item.user.name&#8221; which would return the username for each tweet (which is useless as you know it&#8217;s all my tweets <img src='http://www.reynoldsftw.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) &#8211; but you get the idea. You also need to make sure you have previously called the jQuery library.</p>
<p><center><script type="text/javascript"><!--
google_ad_client = "pub-6415056921376217";
google_ad_channel = "in-ad-unit-hor";
google_ui_features = "rc:0";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "";
google_color_url = "0066CC";

//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
<p>The other important factor of the code above is the URL we are using to call Twitter. We have appended &#8220;&amp;callback=?&#8221; onto the end of it. This is to allow the jQuery call to pass the returned data to a callback function, which in this case is simply called &#8220;data&#8221; for the returned data, and &#8220;function()&#8221; for the callback.</p>
<p><a href="http://www.reynoldsftw.com/wp-content/uploads/2009/12/twitter.html.zip" target="_self">Download the code here</a>.</p>
<p>So, that&#8217;s it. It really is that simple. In my next tutorial I will show you how to do the above, but ajax it back to your server and save it to your database &#8211; in effect getting your users to do a lot of the hard work for you in the browser, and simply sending back the relevant results to your database.
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F12%2Ftwitter-api-calls-in-the-browser-with-json-and-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F12%2Ftwitter-api-calls-in-the-browser-with-json-and-jquery%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/12/twitter-api-calls-in-the-browser-with-json-and-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>From MySQL to jQuery, via PHP, XML &amp; Ajax</title>
		<link>http://www.reynoldsftw.com/2009/09/from-mysql-to-jquery-via-php-xml-ajax/</link>
		<comments>http://www.reynoldsftw.com/2009/09/from-mysql-to-jquery-via-php-xml-ajax/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 15:53:49 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Back to Basics]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1566</guid>
		<description><![CDATA[
			
				
			
		
Back in the early part of this year I posted an article around how to get MySQL data out of the database and into a web page via jQuery and Ajax. The tutorial was okay, but I made some rookie mistakes &#8211; specifically around the creation of XML data with PHP &#8211; This time, I [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F09%2Ffrom-mysql-to-jquery-via-php-xml-ajax%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F09%2Ffrom-mysql-to-jquery-via-php-xml-ajax%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Back in the early part of this year I posted an article around how to get MySQL data out of the database and into a web page via jQuery and Ajax. The tutorial was okay, but I made some rookie mistakes &#8211; specifically around the creation of XML data with PHP &#8211; This time, I hope to rectify that!</p>
<p>So this article will focus on getting data from a database using PHP, converting that to an XML document, and reading that XML in through jQuery via Ajax calls. Seems complex, but is in fact, very easy.</p>
<h3>Database Design</h3>
<p>This tutorial assumes you know how to connect to your database. It also assumes that you have a table setup called &#8220;people&#8221; with 3 columns: &#8220;title&#8221;, &#8220;firstname&#8221; and &#8220;surname&#8221;. Please enter some data into this table as it will be required.</p>
<h3>The XML structure</h3>
<p>So, the point of this tutorial is to read some XML with an Ajax call from jQuery, therefore we need to structure our data correctly. Here is an example of the structure our XML document will generate:</p>
<p><span id="more-1566"></span></p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;
&lt;people&gt;
&lt;person&gt;
&lt;firstname title=&quot;Mr&quot;&gt;Steve&lt;/firstname&gt;
&lt;surname&gt;Reynolds&lt;/surname&gt;
&lt;/person&gt;
&lt;person&gt;
&lt;firstname title=&quot;Mr&quot;&gt;David&lt;/firstname&gt;
&lt;surname&gt;Grohl&lt;/surname&gt;
&lt;/person&gt;
&lt;/people&gt;</pre>
<p>I won&#8217;t go into anymore details other than that is what our PHP script will generate for us for each row entry in the database.</p>
<h3>The PHP</h3>
<p><img class="aligncenter size-full wp-image-960" title="php-xml" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/php-xml.png" alt="php-xml" width="301" height="79" /></p>
<p>First up, we&#8217;ll get the data from the database, and then iterate through each row result to generate the XML for that particular entry. We&#8217;ll do that by using the PHP function DOMDocument() which creates an XML document for us, and also allows us to add nodes and children to the XML on the fly.</p>
<pre class="brush: php;">$query = &quot;SELECT title,firstname,surname FROM people&quot;;
$result = mysql_query($query);

$doc = new DomDocument('1.0');

// create root node
$root = $doc-&gt;createElement('people');
$root = $doc-&gt;appendChild($root);

while($array = mysql_fetch_array($result)) {

	// add node for each row
	$occ = $doc-&gt;createElement('person');
	$occ = $root-&gt;appendChild($occ);

	$child = $doc-&gt;createElement('firstname');
	$child = $occ-&gt;appendChild($child);
	$child-&gt;setAttribute('title', $array['title']);
	$value = $doc-&gt;createTextNode($array['firstname']);
	$value = $child-&gt;appendChild($value);

	$child = $doc-&gt;createElement('surname');
	$child = $occ-&gt;appendChild($child);
	$value = $doc-&gt;createTextNode($array['surname']);
	$value = $child-&gt;appendChild($value);

}</pre>
<p>Next up we need to form that into an XML file. The way we do this is tell the PHP file to save the XML document with the saveXML() function, get the PHP script to respond with an XML type header, therefore anything that is echoed out will be interpreted by the browser as XML. So after the code above, add this:</p>
<pre class="brush: php;">$xml_string = $doc-&gt;saveXML();

header('Content-Type: application/xml; charset=ISO-8859-1');

echo $xml_string;</pre>
<p>So, the header part tells the browser that this is an XML content type, and the rest is simply echoing out the XML data structure as mentioned previously.</p>
<p>Hopefully now, when you run that PHP script you should return a valid XML document&#8230;</p>
<p><center><script type="text/javascript"><!--
google_ad_client = "pub-6415056921376217";
google_ad_channel = "in-ad-unit-hor";
google_ui_features = "rc:0";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "";
google_color_url = "0066CC";

//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
<h3>Ajax with jQuery</h3>
<p><img class="aligncenter size-full wp-image-961" title="xml-ajax" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/xml-ajax.png" alt="xml-ajax" width="312" height="73" /></p>
<p>The last piece to this puzzle is getting that XML data into an HTML page using jQuery and ajax. Again, it&#8217;s pretty easy to do, here is the basic HTML structure I am using for this tutorial:</p>
<pre class="brush: xml;">&lt;html&gt;
&lt;head&gt;
&lt;title&gt;The HTML&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.3.1.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;thejs.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;container&quot;&gt;&lt;/div&gt;
&lt;input type=&quot;submit&quot; id=&quot;getData&quot; name=&quot;getData&quot; value=&quot;Get Data!&quot; /&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>You need to obviously include the jQuery library, I am also including an external javascript file for our jQuery code. So go ahead and create a javascript file called thejs.js and put the code below into it:</p>
<pre class="brush: jscript;">$(document).ready(function() {
$(&quot;#getData&quot;).click(function(){
var data = &quot;&quot;;
$.get(&quot;thephp.php&quot;, function(theXML){
$('person',theXML).each(function(i){

var title = $(this).find(&quot;firstname&quot;).attr(&quot;title&quot;);
var firstname = $(this).find(&quot;firstname&quot;).text();
var surname = $(this).find(&quot;surname&quot;).text();

data = data + title + &quot; &quot; + firstname + &quot; &quot; + surname + &quot;&lt;br&gt;&quot;;
});
$(&quot;#container&quot;).html(data);
});
});
});</pre>
<p>So this code is firstly wiring up a click event on a button, and then making a GET Ajax call to the PHP script we made earlier. Once it receives some XML data it iterates through each &#8220;person&#8221; node.</p>
<p>Notice, I am returning two different data sources from the XML, the data in between the &lt;firstname&gt; and &lt;surname&gt; tags, as well as also returning the data for an XML node attribute, in this case &#8220;title&#8221;. This doesn&#8217;t really make much sense in this context, but what it does show you is how you can access attribute information with the function.</p>
<h3>Download</h3>
<div id="attachment_86" class="wp-caption alignleft" style="width: 70px"><a href="http://www.reynoldsftw.com/wp-content/uploads/2009/09/php-xml-jquery-ajax.zip"><img class="size-full wp-image-86" title="Download Icon" src="http://www.reynoldsftw.com/wp-content/uploads/2009/01/drop-box-icon.png" alt="Download" width="60" height="60" /></a><p class="wp-caption-text">Download</p></div>
<p>So that&#8217;s it! You can see a <a href="http://demos.reynoldsftw.com/php-xml-jquery-ajax/theHTML.html" target="_blank">working demo of this here</a>. Download all the sourcecode by clicking the box icon on the left hand side. The code is fully working, you just need to add your database connection code to the PHP script. Feel free to leave feedback and comments in the section below!</p>
<h3>Tools to help you learn&#8230;</h3>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<thead></thead>
<tbody>
<tr>
<td width="33%" align="center" valign="top">
<div id="attachment_613" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847196705?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847196705"><img class="size-full wp-image-613" title="jquery13" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery13.jpg" alt="Learning jQuery 1.3" width="101" height="132" /></a><p class="wp-caption-text">Learning jQuery 1.3</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847196705" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_966" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/0672329166?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0672329166"><img class="size-full wp-image-966" title="phpmysql" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/phpmysql.jpeg" alt="PHP MySQL Development" width="101" height="132" /></a><p class="wp-caption-text">PHP MySQL Development</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=0672329166" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_612" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847195121?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847195121"><img class="size-full wp-image-612" title="jquery-ui" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery-ui.jpg" alt="jQuery UI 1.6" width="101" height="132" /></a><p class="wp-caption-text">jQuery UI 1.6</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847195121" border="0" alt="" width="1" height="1" /></td>
</tr>
</tbody>
</table>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F09%2Ffrom-mysql-to-jquery-via-php-xml-ajax%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F09%2Ffrom-mysql-to-jquery-via-php-xml-ajax%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/09/from-mysql-to-jquery-via-php-xml-ajax/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Custom 404 with jQuery and jQuery UI</title>
		<link>http://www.reynoldsftw.com/2009/09/custom-404-with-jquery-and-jquery-ui/</link>
		<comments>http://www.reynoldsftw.com/2009/09/custom-404-with-jquery-and-jquery-ui/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 16:10:08 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[jQuery UI]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1514</guid>
		<description><![CDATA[
			
				
			
		
So I thought I would have a whizz at creating a custom 404 error message page, seeing as they&#8217;re so dull! What better way to do this, than with some sexy jQuery UI animations, and a snipsy bit of jQuery? This tutorial isn&#8217;t limited to 404 error pages, you can use this animation technique anywhere. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F09%2Fcustom-404-with-jquery-and-jquery-ui%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F09%2Fcustom-404-with-jquery-and-jquery-ui%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>So I thought I would have a whizz at creating a custom 404 error message page, seeing as they&#8217;re so dull! What better way to do this, than with some sexy jQuery UI animations, and a snipsy bit of jQuery? This tutorial isn&#8217;t limited to 404 error pages, you can use this animation technique anywhere. Here&#8217;s the premise &#8211; a 404 that&#8217;s breaking, the page is literally cracking into bits:</p>
<div id="attachment_1515" class="wp-caption aligncenter" style="width: 310px"><a href="http://demos.reynoldsftw.com/glorious-404/404.html" target="_blank"><img class="size-full wp-image-1515 " title="cracking-up-404" src="http://www.reynoldsftw.com/wp-content/uploads/2009/09/cracking-up-404.png" alt="Click to see my cracking demo" width="300" height="140" /></a><p class="wp-caption-text">Click to see my cracking demo</p></div>
<p>You&#8217;ve got to <a href="http://demos.reynoldsftw.com/glorious-404/404.html" target="_blank">check it out</a> above! You like? Here is how I did it.</p>
<h3>HTML &amp; CSS</h3>
<p>First off I built a basic HTML structure &#8211; this obviously has key parts missing, but for the sake of the demo this is what we&#8217;ve got:</p>
<p>
<pre class="brush: xml;">&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;404 - File Not Found - Reynoldsftw.com&lt;/title&gt;

		&lt;script src=&quot;js/jquery-1.3.2.min.js&quot;&gt;&lt;/script&gt;
		&lt;script src=&quot;js/jquery-ui-1.7.2.custom.min.js&quot;&gt;&lt;/script&gt;
		&lt;script src=&quot;js/jquery-background.js&quot;&gt;&lt;/script&gt;
		&lt;script src=&quot;js/controller.js&quot;&gt;&lt;/script&gt; 

		&lt;LINK href=&quot;css/style.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;
	&lt;/head&gt;
	&lt;body&gt;
	&lt;div id=&quot;error_code&quot;&gt;404&lt;/div&gt;
	&lt;div id=&quot;error_status&quot;&gt;File Not Found&lt;/div&gt;
	&lt;div id=&quot;error_message&quot;&gt;We're sorry you are seeing this page, please don't break the site again!&lt;/div&gt;

	&lt;div id=&quot;crack&quot;&gt;&lt;/div&gt;
	&lt;div id=&quot;crack_overlay&quot;&gt;&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
</p>
<p>Some DIVS for the text content, and also a couple of empty DIVs that will hold two images. One being the crack, the second being an overlay .png file which we will animate over the top. Here&#8217;s the CSS for those two image DIVS:</p>
<p>
<pre class="brush: css;">#crack
{
	z-index: 1;
	position: absolute;
	width: 200px;
	height: 600px;
	background-image: url(../images/crack.png);
	left: 520px;
	top: 0px;
}

#crack_overlay
{
	z-index: 1000;
	position: absolute;
	width: 200px;
	height: 600px;
	background-image: url(../images/crack_over.png);
	background-position: 0px -1100px;
	left: 520px;
	top: 0px;
}</pre>
</p>
<p>A couple of things to note &#8211; the overlay image is extremely large in height, therefore I am positioning it in the DIV so that in that position, the crack image/DIV underneath it cannot be seen (background-position-y: -1100px;). Both DIVs are absolutely positioned, as well as the overlay having a z-index higher than that of the image/DIV underneath. Okay, let&#8217;s &#8220;crack&#8221; on&#8230;</p>
<h3>jQuery and jQuery UI</h3>
<p>Next we have the jQuery UI and jQuery code. I&#8217;ve chosen to use the &#8220;shake&#8221;, &#8220;bounce&#8221; and &#8220;pulsate&#8221; jQuery UI effects, setting their options quite tightly so that the movements made are very minimal &#8211; giving the wall shaking, earthquakey effect. I&#8217;ve also set some timers to randomly shake various elements, as well as re-position the overlay so that more and more of the crack is revealed.</p>
<p><center><script type="text/javascript"><!--
google_ad_client = "pub-6415056921376217";
google_ad_channel = "in-ad-unit-hor";
google_ui_features = "rc:0";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "";
google_color_url = "0066CC";

//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
<p>
<pre class="brush: jscript;">var coord = -1125;

$(document).ready(function() {

	setTimeout(&quot;shake()&quot;, 2000);
});

function reveal()
{
	setTimeout(&quot;moreCrack(coord)&quot;, 200);
}

function shake()
{
	coord = coord + 50;
	if(coord &lt; -125)
	{
		$(&quot;#crack&quot;).effect(&quot;shake&quot;, {distance: 1}, 40, reveal);
		$(&quot;#error_code&quot;).effect(&quot;bounce&quot;, {distance: 5}, 50);
		$(&quot;#error_status&quot;).effect(&quot;pulsate&quot;, {times: 2}, 50);
	} else {

		$(&quot;#crack_overlay&quot;).hide();	

	}
}

function randomXToY(minVal,maxVal,floatVal)
{
  var randVal = minVal+(Math.random()*(maxVal-minVal));
  return typeof floatVal=='undefined'?Math.round(randVal):randVal.toFixed(floatVal);
}

function moreCrack(coord)
{
	$(&quot;#crack_overlay&quot;).animate({backgroundPosition:&quot;(0 &quot; + coord + &quot;)&quot;});
	setTimeout(&quot;shake()&quot;, randomXToY(3500, 5000));
}</pre>
</p>
<p>Okay, so on the document.ready() call, I&#8217;m setting up a timer to call the shake() function. This will then call a chain of functions to shake and reveal more of the crack (moreCrack()). I then start over again, but call shake at a random interval so that it is less predictable.</p>
<p>Finally, the shake() function keeps an eye on the position of the overlay DIV and stops the entire thing once there is no more to reveal.</p>
<h3>Download the solution</h3>
<div id="attachment_86" class="wp-caption alignleft" style="width: 70px"><a href="http://www.reynoldsftw.com/wp-content/uploads/2009/09/glorious-4041.zip"><img class="size-full wp-image-86" title="Download Icon" src="http://www.reynoldsftw.com/wp-content/uploads/2009/01/drop-box-icon.png" alt="Download Solution" width="60" height="60" /></a><p class="wp-caption-text">Download Solution</p></div>
<p>As ever, here is the code for you all bundled up. Feel free to have a play and let me know how it goes. There are a few ways looking at it at how to streamline some of the code, but I thought I&#8217;d get it out there for you all to play with for now! Probably more soon.</p>
<p>Anyway &#8211; click the icon to the left or <a href="http://www.reynoldsftw.com/wp-content/uploads/2009/09/glorious-4041.zip" target="_blank">download here</a>. Please let me know if you use it, or do something even cooler with it &#8211; stick an url in the comments!</p>
<h3>Tools to help you learn&#8230;</h3>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<thead></thead>
<tbody>
<tr>
<td width="33%" align="center" valign="top">
<div id="attachment_613" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847196705?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847196705"><img class="size-full wp-image-613" title="jquery13" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery13.jpg" alt="Learning jQuery 1.3" width="101" height="132" /></a><p class="wp-caption-text">Learning jQuery 1.3</p></div></p>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847196705" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_770" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/B00154JDAI?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00154JDAI"><img class="size-full wp-image-770" title="kindle" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/kindle.jpg" alt="Amazon Kindle 2" width="101" height="132" /></a><p class="wp-caption-text">Amazon Kindle 2</p></div></p>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=B00154JDAI" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_612" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847195121?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847195121"><img class="size-full wp-image-612" title="jquery-ui" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery-ui.jpg" alt="jQuery UI 1.6" width="101" height="132" /></a><p class="wp-caption-text">jQuery UI 1.6</p></div></p>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847195121" border="0" alt="" width="1" height="1" /></td>
</tr>
</tbody>
</table>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F09%2Fcustom-404-with-jquery-and-jquery-ui%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F09%2Fcustom-404-with-jquery-and-jquery-ui%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/09/custom-404-with-jquery-and-jquery-ui/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Top 10 jQuery Plugins (according to reynoldsftw.com)</title>
		<link>http://www.reynoldsftw.com/2009/08/top-10-jquery-plugins-according-to-reynoldsftw-com/</link>
		<comments>http://www.reynoldsftw.com/2009/08/top-10-jquery-plugins-according-to-reynoldsftw-com/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 08:00:21 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Chart]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[Graph]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Plugins]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1236</guid>
		<description><![CDATA[
			
				
			
		
So over the past 6 months I&#8217;ve taken a look at many jQuery plugins via this website. After some time I thought it would be interesting to see out of all of the plugins I&#8217;ve looked at, which ones are getting the most interest. Well the results are in:

Here&#8217;s that list:
1. Flot : http://code.google.com/p/flot/
2. Google [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Ftop-10-jquery-plugins-according-to-reynoldsftw-com%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Ftop-10-jquery-plugins-according-to-reynoldsftw-com%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>So over the past 6 months I&#8217;ve taken a look at many jQuery plugins via this website. After some time I thought it would be interesting to see out of all of the plugins I&#8217;ve looked at, which ones are getting the most interest. Well the results are in:</p>
<p><img class="aligncenter size-full wp-image-1238" title="jq-plugin-chart" src="http://www.reynoldsftw.com/wp-content/uploads/2009/08/jq-plugin-chart.png" alt="jq-plugin-chart" width="500" height="291" /></p>
<p><span id="more-1236"></span>Here&#8217;s that list:</p>
<p>1. Flot : <a href="http://code.google.com/p/flot/" target="_blank">http://code.google.com/p/flot/</a></p>
<div id="attachment_673" class="wp-caption aligncenter" style="width: 435px"><img class="size-full wp-image-673" title="flot" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/flot.png" alt="flot" width="425" height="86" /><p class="wp-caption-text">Flot</p></div>
<p>2. Google Charts : <a href="http://maxb.net/scripts/jgcharts/include/demo/" target="_blank">http://maxb.net/scripts/jgcharts/include/demo/</a></p>
<div id="attachment_578" class="wp-caption aligncenter" style="width: 324px"><a href="http://maxb.net/scripts/jgcharts/include/demo/"><img class="size-full wp-image-578" title="googlecharts" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/googlecharts.png" alt="Google Charts" width="314" height="130" /></a><p class="wp-caption-text">Google Charts</p></div>
<p>3. Sexy-Combo : <a href="http://vladimir-k.blogspot.com/2009/02/sexy-combo-jquery-plugin.html" target="_blank">http://vladimir-k.blogspot&#8230;jquery-plugin.html</a></p>
<div id="attachment_1135" class="wp-caption aligncenter" style="width: 167px"><img class="size-full wp-image-1135" title="sexy-combo" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/sexy-combo.png" alt="Sexy-Combo Plugin Preview" width="157" height="47" /><p class="wp-caption-text">Sexy-Combo Plugin Preview</p></div>
<p>4. Sparkline : <a href="http://omnipotent.net/jquery.sparkline/" target="_blank">http://omnipotent.net/jquery.sparkline/</a></p>
<div id="attachment_676" class="wp-caption aligncenter" style="width: 224px"><img class="size-full wp-image-676 " title="sparklines" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/sparklines.png" alt="Sparklines" width="214" height="62" /><p class="wp-caption-text">Sparklines</p></div>
<p>5. (mb)ToolTip : <a href="http://pupunzi.wordpress.com/2009/02/07/mbtooltip/" target="_blank">http://pupunzi.wordpress.com/&#8230;/mbtooltip/</a></p>
<div id="attachment_810" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-810 " title="mbtooltip3" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/mbtooltip3.png" alt="(mb)ToolTip" width="400" height="80" /><p class="wp-caption-text">(mb)ToolTip</p></div>
<p><center><script type="text/javascript"><!--
google_ad_client = "pub-6415056921376217";
google_ad_channel = "in-ad-unit-hor";
google_ui_features = "rc:0";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "";
google_color_url = "0066CC";

//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
<p>6. jqchart : <a href="http://jsgt.org/lib/jquery/plugin/jqchart/sample/v003/test-use-gradient.html" target="_blank">http://jsgt.org/lib/jquery/&#8230;/test-use-gradient.html</a></p>
<div id="attachment_674" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-674 " title="jqchart" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jqchart.png" alt="jqchart" width="400" height="149" /><p class="wp-caption-text">jqchart</p></div>
<p>7. Raphaeljs : <a href="http://raphaeljs.com/" target="_blank">http://raphaeljs.com/</a></p>
<div id="attachment_862" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-862" title="raphael" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/raphael.png" alt="raphael" width="400" height="80" /><p class="wp-caption-text">Raphaeljs</p></div>
<p style="text-align: left;">8. Smart Google Map: <a href="http://code.google.com/p/jquery-googlemap/" target="_blank">http://code.google.com/p/jquery-googlemap/</a></p>
<p>9. Alphanumeric : <a href="http://itgroup.com.ph/alphanumeric/" target="_blank">http://itgroup.com.ph/alphanumeric/</a></p>
<div id="attachment_219" class="wp-caption aligncenter" style="width: 398px"><img class="size-full wp-image-219" title="Alphanumeric" src="http://www.reynoldsftw.com/wp-content/uploads/2009/01/alphanumeric.png" alt="Alphanumeric" width="388" height="86" /><p class="wp-caption-text">Alphanumeric</p></div>
<p style="text-align: left;">10. Bluff : <a href="http://bluff.jcoglan.com/" target="_blank">http://bluff.jcoglan.com/</a></p>
<p style="text-align: left;">
<div id="attachment_861" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-861" title="bluff" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/bluff.png" alt="Bluff" width="400" height="80" /><p class="wp-caption-text">Bluff</p></div>
<p>Admittedly, a couple of these are not jQuery plugins after all, but never-the-less, they&#8217;re doing pretty well.</p>
<h3>Observations</h3>
<ul>
<li>Alot of these are around charting or graphing.</li>
<li>Sexy-Combo is right up there, see <a href="http://www.reynoldsftw.com/2009/04/sexy-sells-i-have-the-stats-to-prove-it/" target="_self">this post</a> for more on that. Although this should be high up due to the nature of the popularity of that article around how <a href="http://www.reynoldsftw.com/2009/04/sexy-sells-i-have-the-stats-to-prove-it/" target="_self">&#8220;Sexy Sells&#8221;</a></li>
<li>Interestingly, the Top 10 articles where I reviewed the charting plugins isn&#8217;t way way up there in the stats Vs other Top 10s.</li>
<li>I hope the developers of these plugins appreciate the traffic I am driving to their sites <img src='http://www.reynoldsftw.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Ftop-10-jquery-plugins-according-to-reynoldsftw-com%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Ftop-10-jquery-plugins-according-to-reynoldsftw-com%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/08/top-10-jquery-plugins-according-to-reynoldsftw-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript and DOM Load Time Tester with jQuery</title>
		<link>http://www.reynoldsftw.com/2009/08/javascript-jquery-and-dom-load-time-tester/</link>
		<comments>http://www.reynoldsftw.com/2009/08/javascript-jquery-and-dom-load-time-tester/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 08:24:15 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Load]]></category>
		<category><![CDATA[Tester]]></category>
		<category><![CDATA[Timer]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1225</guid>
		<description><![CDATA[
			
				
			
		
So I have been trying to figure out a really simple, easy way to test the load times of my Javascript in the page, and have ended up creating a simple load time tester using jQuery called jQTester.
This assumes you are using jQuery, and are running using version 1.3.1 &#8211; however it should work on [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Fjavascript-jquery-and-dom-load-time-tester%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Fjavascript-jquery-and-dom-load-time-tester%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>So I have been trying to figure out a really simple, easy way to test the load times of my Javascript in the page, and have ended up creating a simple load time tester using jQuery called <a href="#jqtester">jQTester</a>.</p>
<div id="attachment_1226" class="wp-caption aligncenter" style="width: 392px"><img class="size-full wp-image-1226" title="jQTester" src="http://www.reynoldsftw.com/wp-content/uploads/2009/08/jQTester.png" alt="jQTester" width="382" height="150" /><p class="wp-caption-text">jQTester Displaying its results</p></div>
<p style="text-align: left;">This assumes you are using <a href="http://www.jquery.com" target="_blank">jQuery</a>, and are running using version 1.3.1 &#8211; however it should work on most versions as the jQuery I am using is pretty lightweight.</p>
<p style="text-align: left;">The concept is simple &#8211; you have 2 files called <em>start.js</em> and <em>end.js</em>. Place <em>start.js</em> at the top, just after your &lt;HEAD&gt; tag, and place <em>end.js</em> just before &lt;/body&gt;. Using javascript timers I am capturing the length of time between start.js loading, and the <a href="http://docs.jquery.com/Events/ready#fn" target="_blank">document.ready</a> jQuery function running (when, all javascript and DOM elements should be loaded and ready to use).</p>
<p style="text-align: left;"><span id="more-1225"></span></p>
<h3>Why place end.js before &lt;/body&gt; ?</h3>
<p>So, ideally you are placing your javascript calls at the end of the HTML document. Why? because javascript file downloads block parallel downloads in the browser. Browsers can only download 2 files per hostname at any one time, so by placing them in the &lt;HEAD&gt; you are in theory stopping anything else from loading within the page whilst all your javascript is being loaded. By placing them at the end of the HTML document, images etc have the chance to load first, so the perception for the user is faster load times.</p>
<p><center><script type="text/javascript"><!--
google_ad_client = "pub-6415056921376217";
google_ad_channel = "in-ad-unit-hor";
google_ui_features = "rc:0";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "";
google_color_url = "0066CC";

//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
<p>So the browser will load your HTML document top to bottom. Based on the assumption that no other javascript needs to load after &lt;/body&gt; is called, the best place to stop the timer is at that last point. That&#8217;s when the clock stops, and we assume we&#8217;re all loaded.</p>
<p><a name="jqtester"></a></p>
<h3>jQTester 0.1</h3>
<p>So I&#8217;m not really 100% sure if this is the right way to go about this, but anyway &#8211; I&#8217;ve packaged this up as &#8220;jQTester&#8221; and am attaching version 0.1 for your perusal. It would be good to get some feedback on how I can move forward with this, as I am keen to develop a tool or plugin that can sit within the page code, rather than being a browser add-on etc.</p>
<div id="attachment_86" class="wp-caption alignleft" style="width: 70px"><a href="http://www.reynoldsftw.com/wp-content/uploads/2009/08/jQTester-0.1.zip"><img class="size-full wp-image-86 " title="Download Icon" src="http://www.reynoldsftw.com/wp-content/uploads/2009/01/drop-box-icon.png" alt="jQTester 0.1" width="60" height="60" /></a><p class="wp-caption-text">Download jQTester 0.1</p></div>
<p><strong>Install instructions:</strong> Use jQuery, place start.js after the &lt;head&gt; tag and place end.js before the &lt;/body&gt; tag.</p>
<p>Add your comments below on ways to improve jQTester.
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Fjavascript-jquery-and-dom-load-time-tester%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Fjavascript-jquery-and-dom-load-time-tester%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/08/javascript-jquery-and-dom-load-time-tester/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RIA Applications &#8211; Crunch on the Client side</title>
		<link>http://www.reynoldsftw.com/2009/08/ria-applications-crunch-on-the-client-side/</link>
		<comments>http://www.reynoldsftw.com/2009/08/ria-applications-crunch-on-the-client-side/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 18:22:41 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[HTML 5]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1222</guid>
		<description><![CDATA[
			
				
			
		
With the advent of new browsers such as Safari 4 we&#8217;re now also   starting to see HTML 5. HTML 5 brings a number of things to the plate,   one of the biggest things being client side databases. In addition to   this, excellent JavaScript libraries such as jQuery are really [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Fria-applications-crunch-on-the-client-side%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Fria-applications-crunch-on-the-client-side%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>With the advent of new browsers such as Safari 4 we&#8217;re now also   starting to see <a href="http://en.wikipedia.org/wiki/HTML_5" target="_blank">HTML 5</a>. HTML 5 brings a number of things to the plate,   one of the biggest things being client side databases. In addition to   this, excellent JavaScript libraries such as <a href="http://www.jquery.com" target="_blank">jQuery</a> are really making   headway, making client side DOM manipulation a jingle.</p>
<p>JavaScript   engines too are getting huge speed boosts with the latest browsers. In   fact, all the latest browsers from IE to Safari are all pimping their   own &#8220;awesome&#8221; and super fast JavaScript engines. There is alot of   focus here, rightly so as web development quickly moves towards Rich   Internet Applications (RIA).</p>
<p><span id="more-1222"></span></p>
<h3>Client-side databases</h3>
<p>Of course, this isn&#8217;t new. <a href="http://gears.google.com/" target="_blank">Google Gears</a> has been offering a browser   plugin for server side databases for quite some time now. The trouble   is, it&#8217;s a plugin. It&#8217;s not native, and requires action from the end   user to install.</p>
<p>The great thing about it though, is that you can effectively offload a   bunch of data over to the client, and get your application to query it   from there, instead of your server. It also means that offline web   application usage is even more of a reality as in theory, the app no   longer needs to query a web server for it&#8217;s data.</p>
<h3>Architecture and Functionality</h3>
<p>So what does this all mean? Why should we be thinking different?   Simply, this changes everything.</p>
<p>Think about it. You&#8217;ve got a bunch of servers, your database servers   are the crux of it all, and they struggle under heavy usage due to the   number of queries going on. What we should be proposing is offloading   some of the database work onto the client.</p>
<p>What you have to remember is, a large proportion of your users are   probably using a PC that is extremely powerful. Upto now, web   technologies haven&#8217;t really been pushing client machines (other than   the unruley flash). So why not utilise some of that power yourself,   offload some of the processing of data from your servers and onto the   client.</p>
<p><center><script type="text/javascript"><!--
google_ad_client = "pub-6415056921376217";
google_ad_channel = "in-ad-unit-hor";
google_ui_features = "rc:0";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "";
google_color_url = "0066CC";

//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
<p>Of course, this isn&#8217;t as simple as it sounds. We have a few issues.</p>
<ol>
<li>Bandwidth. We would assume that a user had the broadband capabilty   to download large chunks of data quickly.</li>
<li>PC Performance. We would   have to assume that all users have a fairly decent processor.</li>
<li>Browser Compatibility. None of this is mandated yet. HTML 5 is nowhere   in IE8, so until it&#8217;s common place in browsers, it&#8217;s a difficult   project to get underway.</li>
</ol>
<p>That said, think of the future. Think of client side databases holding   a subset of data that can be queried and manipulated in split seconds   by awesome JavaScript engines within browsers. Database servers can be   freed up for more important duties, even the application layer to a   degree. Anyone with a major server architecture can clearly see some   great wins here, if only everyone could catch up.</p>
<div><span style="font-family: arial, sans-serif;"><span style="border-collapse: collapse; line-height: normal; white-space: pre-wrap; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><br />
</span></span></div>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Fria-applications-crunch-on-the-client-side%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F08%2Fria-applications-crunch-on-the-client-side%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/08/ria-applications-crunch-on-the-client-side/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Custom events in jQuery open doors to complex behaviors</title>
		<link>http://www.reynoldsftw.com/2009/04/custom-events-in-jquery-open-doors-to-complex-behaviors/</link>
		<comments>http://www.reynoldsftw.com/2009/04/custom-events-in-jquery-open-doors-to-complex-behaviors/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 14:00:27 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Behaviours]]></category>
		<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1150</guid>
		<description><![CDATA[
			
				
			
		
This post is written by Rebecca Murphey. Rebecca is a front-end architecture consultant based in Durham, N.C., specializing in jQuery development and standards-based HTML and CSS. You can read her blog or find her on Twitter @rmurphey.
I&#8217;ve been doing a lot of thinking lately about the best way to organize non-trivial jQuery features; in my [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F04%2Fcustom-events-in-jquery-open-doors-to-complex-behaviors%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F04%2Fcustom-events-in-jquery-open-doors-to-complex-behaviors%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><em>This post is written by </em><a href="http://www.rebeccamurphey.com"><em>Rebecca Murphey</em></a><em>. Rebecca is a front-end architecture consultant based in Durham, N.C., specializing in jQuery development and standards-based HTML and CSS. You can read her </em><a href="http://blog.rebeccamurphey.com"><em>blog</em></a><em> or find her on Twitter </em><a href="http://twitter.com/rmurphey"><em>@rmurphey</em></a><em>.</em></p>
<p>I&#8217;ve been doing a lot of thinking lately about the best way to organize non-trivial jQuery features; in my article in April&#8217;s <a href="http://jsmag.com">JSMag</a>, I talk about using the object literal pattern for separating the component pieces of a feature. A second option that bears mentioning involves making use of jQuery&#8217;s custom events, and that&#8217;s what I want to talk about today.</p>
<p>Custom events let you structure your code such that behaviors are bound to the thing that&#8217;s being acted on, rather than the thing that triggers the action. For example, imagine a container that can be expanded or collapsed. The traditional approach would be to bind the expansion and contraction behavior to the element that triggers the behavior:</p>
<pre class="brush: xml;">
&lt;div&gt;
&lt;div class=&quot;toggleElement&quot;&gt;Open/Close&lt;/div&gt;
&lt;h1&gt;Title&lt;/h1&gt;
&lt;div class=&quot;expandable&quot;&gt;

Expandable content&lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
$('div.toggleElement').click(function() {
 $(this).parent().find('div.expandable').toggle();
});
&lt;/script&gt;
</pre>
<p>An approach that uses custom events might separate the task into two parts: first, saying that the container is expandable; then, saying which element will trigger the behavior:</p>
<pre class="brush: xml;">
&lt;div class=&quot;expandableContainer&gt;
&lt;div class=&quot;toggleElement&quot;&gt;Open/Close&lt;/div&gt;
&lt;h1&gt;Title&lt;/h1&gt;
&lt;div class=&quot;expandable&quot;&gt;

Expandable content&lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
// say the container is expandable
$('div.expandableContainer').bind('toggleContent', function() {
 $(this).find('div.expandable').toggle();
});

// bind the expansion/contraction to the toggleElement
$('div.toggleElement').click(function() {
 $(this).parent().trigger('toggleContent');
});
&lt;/script&gt;
</pre>
<p>As with lots of examples of new ways to do things, the custom event method is longer and perhaps a bit more confusing than the &#8220;traditional&#8221; way of handling this. However, as the number of behaviors that you can trigger grows, the more useful it becomes to have the definition of those behaviors associated with the element that the behaviors affect, rather than the element that triggers the behavior. With custom events, you can start to write code that depends less on the specific markup to which your events are bound, and more on the behaviors that certain elements are expected to exhibit. This can be especially useful when you start to define the behaviors of a widget, as you&#8217;ll see in a moment.</p>
<h3>A quick recap of .bind() and .trigger()</h3>
<p>Before we move forward, let&#8217;s back up for a second to make sure we have the basics covered.</p>
<p>jQuery offers a number of so-called convenience methods for binding behaviors, such as .click(), .mouseover(), .keyup(), etc. We&#8217;ll still use these, but it&#8217;s important to also understand the more verbose .bind() method, which needs to be used for custom events, and the generic .trigger() method, which can be used to trigger (duh) an event. We also want to understand how to take advantage of the .bind() method&#8217;s ability to store data for later use.<br />
Here&#8217;s an example of how we could use .bind() and .trigger():</p>
<pre class="brush: jscript;">
$('body').bind('foo', { 'bar' : 'bam' }, function(e) { alert(e.data.bar); });
$('body').trigger('foo'); // alerts 'bam'
</pre>
<p>For the record, you can also pass data to the .trigger() method, though this isn&#8217;t quite as pretty. Note that the first argument passed to the function handling the event will always be the event object.</p>
<pre class="brush: jscript;">
$('body').bind('foo', function(e, param1, param2) { alert(param1 + ': ' + param2); });
$('body').trigger('foo', [ 'bar', 'bam' ]); // alerts 'bar: bam'
</pre>
<p>With that out of the way, let&#8217;s move on to a slightly more complex example of custom events.</p>
<h3>An expandable, collapsible, editable, removable widget</h3>
<p>The value of custom events becomes clearer when there are several behaviors that you need to trigger on the same element. For the sake of this post, we&#8217;re going to work on an imaginary widget that has several behaviors:</p>
<p>* It can be edited. Triggering the edit event loads a form for editing the widget, which is then AJAX-enabled to load the expanded widget with the new content.</p>
<p>* It can be deleted. Triggering the delete event removes the widget from the page, and sends a message to the server that the widget has been deleted.</p>
<p>* It can be expanded. Triggering the expand event the first time loads the full content of the widget from the server; triggering it again uses the already-fetched content.</p>
<p>* It can be collapsed. Triggering the collapse event hides the expanded content of the widget.</p>
<p>We&#8217;ll start with some basic HTML that represents a couple of widgets on the page:</p>
<pre class="brush: xml;">
&lt;div class=&quot;widget&quot; id=&quot;widget1&quot;&gt;
&lt;h1&gt;Title&lt;/h1&gt;
&lt;div class='content'&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;widget&quot; id=&quot;widget2&quot;&gt;
&lt;h1&gt;Title&lt;/h1&gt;
&lt;div class='content'&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Obviously these aren&#8217;t very exciting widgets, but note that they have a common class (&#8221;widget&#8221;) and unique IDs. We&#8217;ll use the class to target our event bindings; we&#8217;ll use their IDs to communicate to the back-end about which widget we&#8217;re working with when we are editing, deleting, or saving them. The back-end will be responsible for presenting us with the appropriate content or the appropriate form for editing the widget based on the ID.</p>
<p>Next, let&#8217;s set up the simplest custom event, delete.</p>
<pre class="brush: jscript;">
var widgetScript = 'widgetManager.php';

$('div.widget').
 bind('delete', function(e, $li) {
 var $this = $(this);
 // send a message to the server to delete the widget
 $.post(
 // use the widgetScript as the URL for the post
 widgetScript, 

 // tell the widget script that we want to delete a
 // widget and give it the id of the widget to delete
 { 'action' : 'delete', 'widget_id' : $this.attr('id') }, 

 // when the script returns, remove the widget from the page
 function() { $this.remove(); }
 );
 });
</pre>
<p>Note that when the code refers to</p>
<pre class="brush: plain;">$(this)</pre>
<p>it&#8217;s referring to the widget to which the event was bound. Now, if we wanted to delete the first widget, we could do:</p>
<pre class="brush: jscript;">
$('#widget1').trigger('delete');
</pre>
<p>which is handy but not all that exciting. Let&#8217;s go ahead and set up the rest of the custom events &#8230;</p>
<pre class="brush: jscript;">
$('div.widget').

 bind('delete', function(e) {
 var $this = $(this);
 $.post(
 widgetScript,
 { 'action' : 'delete', 'widget_id' : $this.attr('id') },
 function() { $(this).remove(); }
 );
 }).

 bind('edit', function(e) {
 var $this = $(this);
 var $controls = $this.find('ul.controls').clone(true);
 $this.load(
 widgetScript,
 { 'action' : 'edit', widget_id : $this.attr('id') },

 // ajax-enable the form that is returned
 function(html) {
 // populate with new content
 $this.html(html);
 $this.find('form').submit(function(e) {
 e.preventDefault();
 var $form = $(this);
 var url = $form.attr('action');

 // do an AJAX post of the form using
 // the form's action attribute as the URL
 $.post(
 url, 

 // serialize the form data and tack on the action
 // and widget id
 $form.serialize() +
 '&amp;action=save&amp;widget_id=' +
 $this.attr('id'),
 function(html) {
 // populate the widget with the returned
 // html and restore the controls
 $this.html(html).prepend($controls);
 }
 );
 });
 }
 );
 }).

 bind('expand', function(e) {
 var $this = $(this);

 // get the full content from the server
 if (!$this.hasClass('contentLoaded')) {
 $(this).find('div.content').load(
 widgetScript,
 { 'action' : 'expand', 'widget_id' : $(this).attr('id') },
 function() { $this.addClass('contentLoaded'); }
 );
 }

 // mark the widget as expanded, which will
 // show the full content via css
 $this.addClass('expanded');
 }).

 bind('collapse', function(e) {
 // mark the widget as collapsed, which will
 // hide the full content via css
 $(this).removeClass('expanded');
 });
</pre>
<p>At this point, we have four custom events that we can trigger on any widget (or set of widgets) from anywhere in our code. The ability to run a custom event against a set of elements in a single line is a powerful benefit of using custom events. For example, if we wanted to expand all widgets, we could do:</p>
<pre class="brush: jscript;">
$('div.widget').trigger('expand');
</pre>
<p>which would fetch the content for each widget, populate each widget&#8217;s content div, and expand each widget to show its content. This ability to trigger custom events on a set of widgets &#8212; whether it&#8217;s all of them, the first one, the odd ones, a set chosen by the user, or whatever set makes you happy &#8212; is one of the most powerful advantages of structuring your features this way.</p>
<h3>Hooking it up</h3>
<p>The final step in this example is adding controls to the widgets to actually initiate the events. We&#8217;ll do this by building a controls element and adding it to each of the widgets. The controls element will look to see which widget it belongs to, and then use the class attribute of individual control elements to trigger the proper event on the widget.</p>
<pre class="brush: jscript;"> var $controls = $('
&lt;ul class=&quot;controls&quot;/&gt;');

$('
	&lt;li class=&quot;edit&quot;&gt;Edit&lt;/li&gt;
').appendTo($controls);
$('
	&lt;li class=&quot;delete&quot;&gt;Delete&lt;/li&gt;
').appendTo($controls);
$('
	&lt;li class=&quot;expand&quot;&gt;Expand&lt;/li&gt;
').appendTo($controls);

// event delegation on the controls element
$('div.widget ul.controls').click(function(e) {
 // get the actual element that was clicked
 var $t = $(e.target);

 // if the element that was clicked is an
	&lt;li&gt; and
 // is not disabled ...
 if ($t.is('li:not(.disabled)')) {
 // determine which widget the controls belong to
 var $widget = $(this).parents('div.widget');

 // use the class on the li to determine what action to trigger;
 // pass the triggered event a data array containing the
 // element that initiated the event
 $widget.trigger($t.attr('class'), [$t]);
 };
});

$('div.widget').prepend($controls.clone(true));
</pre>
<p>Note that we&#8217;re passing some data when we trigger the event, in the form of an array that contains the element that initiated the event (the &lt;li&gt; that was clicked). With some minor adjustments to the widget event handlers, we can use this data to change the text of the &lt;li&gt; when the widget is expanded or collapsed.</p>
<pre class="brush: jscript;">
// ...
bind('expand', function(e, $sourceElement) { // ADDED $sourceElement as argument
 var $this = $(this);
 if (!$this.hasClass('contentLoaded')) {
 $(this).find('div.content').load(
 widgetScript,
 { 'widget_id' : $(this).attr('id'), 'action' : 'expand' },
 function() { $this.addClass('contentLoaded'); }
 );
 }
 $this.addClass('expanded');

 // NEW CODE
 if ($sourceElement) {
 $sourceElement.removeClass().addClass('collapse').text('Collapse');
 }
}).

bind('collapse', function(e, $sourceElement) { // ADDED $sourceElement as argument
 $(this).removeClass('expanded');

 // NEW CODE
 if ($sourceElement) {
 $sourceElement.removeClass().addClass('expand').text('Expand');
 }
});
</pre>
<p>The neat thing here is that this text change is managed by the widget&#8217;s custom event handlers; the code for triggering the event (above) stays nice and clean and abstracted, and the &#8220;collapse&#8221; and &#8220;expand&#8221; custom event handlers are primed for reuse by other elements that might initiate them (and need their text changed, too).</p>
<h3>Conclusion</h3>
<p>When everything&#8217;s said and done, we have created well-organized code that consolidates the behavior widgets in a few bind() statements, rather than scattering those behaviors across the elements that initiate them. We&#8217;ve also gained flexibility, in that it&#8217;s easy for any element to initiate a behavior, or for a behavior to be triggered across multiple widgets at once. Finally, we&#8217;ve added a simple controls element, which captures a click event and translates it into an event to be triggered on the widget.</p>
<p><a href="http://www.rebeccamurphey.com/stuff/custom-events/">See the full code in action</a> (with a dummy back-end).</p>
<p>Custom events are a new way of thinking about jQuery for people accustomed to the traditional model, which puts the emphasis on the element that initiates the event. Custom events, on the other hand, put the emphasis on the object that is being acted upon. Though they can be confusing at first glance, they are a powerful way to organize your code while emphasizing abstraction and reuse.</p>
<p><a href="http://www.rebeccamurphey.com">Rebecca Murphey</a> is a front-end architecture consultant based in Durham, N.C., specializing in jQuery development and standards-based HTML and CSS. You can read her <a href="http://blog.rebeccamurphey.com">blog</a> or find her on Twitter <a href="http://twitter.com/rmurphey">@rmurphey</a>.
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F04%2Fcustom-events-in-jquery-open-doors-to-complex-behaviors%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F04%2Fcustom-events-in-jquery-open-doors-to-complex-behaviors%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/04/custom-events-in-jquery-open-doors-to-complex-behaviors/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>11 jQuery Plugins to Enhance HTML Dropdowns</title>
		<link>http://www.reynoldsftw.com/2009/03/11-jquery-plugins-to-enhance-html-dropdowns/</link>
		<comments>http://www.reynoldsftw.com/2009/03/11-jquery-plugins-to-enhance-html-dropdowns/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 15:00:10 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Combo]]></category>
		<category><![CDATA[Dropdown]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Plugins]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1130</guid>
		<description><![CDATA[
			
				
			
		
Image Combo Box

Marghoob Suleman&#8217;s Javascript Combo Box plugin is a great way to sexy-up your combo boxes within forms. Functionality includes creating combo boxes as images entirely, as well as including images per option. Basically, you can skin the standard combo box.
jQuery DropDown Checklist

This neat jQuery Dropdown Check List widget converts the standard SELECT html [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2F11-jquery-plugins-to-enhance-html-dropdowns%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2F11-jquery-plugins-to-enhance-html-dropdowns%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<h3>Image Combo Box</h3>
<p style="text-align: center;"><a href="http://marghoobsuleman.com/jquery-image-dropdown" target="_blank"><img class="aligncenter size-full wp-image-1129" title="image-combo" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/image-combo.png" alt="image-combo" width="480" height="100" /></a></p>
<p style="text-align: left;">Marghoob Suleman&#8217;s <a href="http://marghoobsuleman.com/jquery-image-dropdown" target="_blank">Javascript Combo Box</a> plugin is a great way to sexy-up your combo boxes within forms. Functionality includes creating combo boxes as images entirely, as well as including images per option. Basically, you can skin the standard combo box.</p>
<h3 style="text-align: left;">jQuery DropDown Checklist</h3>
<p style="text-align: center;"><img class="size-full wp-image-1132" title="dropdown-checklist" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/dropdown-checklist.png" alt="dropdown-checklist" width="425" height="134" /></p>
<p style="text-align: left;">This neat <a href="http://dropdown-check-list.googlecode.com/svn/trunk/demo.html" target="_blank">jQuery Dropdown Check List</a> widget converts the standard SELECT html element into a nice dropdown with multi tickable options.</p>
<p style="text-align: left;">
<h3>McDropDown</h3>
<p style="text-align: center;"><a href="http://www.givainc.com/labs/mcdropdown_jquery_plugin.htm" target="_blank"><img class="aligncenter size-full wp-image-1139" title="mcdropdown" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/mcdropdown.png" alt="mcdropdown" width="418" height="129" /></a></p>
<p>Am quite fond of this implementation. As you can see in the screenshot above, <a href="http://www.givainc.com/labs/mcdropdown_jquery_plugin.htm" target="_blank">McDropDown</a> nicely creates a nested menu of elements to choose from from a simple dropdown. It generates the data from a standard &lt;ul&gt; and &lt;li&gt; implementation and has a huge bunch of options to go with it. Worth checking out.</p>
<p><span id="more-1130"></span></p>
<h3 style="text-align: left;">Droplist Filter</h3>
<p style="text-align: center;"><a href="http://nihilex.com/droplist-filter" target="_blank"><img class="aligncenter size-full wp-image-1134" title="droplistfilter2" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/droplistfilter2.png" alt="droplistfilter2" width="424" height="45" /></a></p>
<p style="text-align: left;"><a href="http://nihilex.com/droplist-filter" target="_blank">Droplist Filter</a> is really pretty damn good. Every had a dropdown with hundreds of options in it? Sure, you can sort them alphabetically, but that is so time consuming &#8211; why not add a nice search filter, hit the Enter key and your option is selected. What a great plugin!</p>
<h3 style="text-align: left;">Sexy Combo</h3>
<p style="text-align: left;"><a href="http://vladimir-k.blogspot.com/2009/02/sexy-combo-jquery-plugin.html" target="_blank"><img class="aligncenter size-full wp-image-1135" title="sexy-combo" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/sexy-combo.png" alt="sexy-combo" width="157" height="47" /></a><a href="http://vladimir-k.blogspot.com/2009/02/sexy-combo-jquery-plugin.html" target="_blank"></a></p>
<p style="text-align: left;"><a href="http://vladimir-k.blogspot.com/2009/02/sexy-combo-jquery-plugin.html" target="_blank">Sexy Combo</a> is another take on the customizable combo dropdown box. With Sexy Combo you can skin it to a degree, as well as tell it other options such as the default text you should see before an option is selected, as well as configurables such as making the options appear above the select box rather than below&#8230;</p>
<h3 style="text-align: left;">QuickSelect</h3>
<p style="text-align: center;"><a href="http://github.com/dcparker/jquery_plugins/tree/master/quickselect" target="_blank"><img class="aligncenter size-full wp-image-1136" title="qselect" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/qselect.png" alt="qselect" width="162" height="105" /></a></p>
<p style="text-align: left;"><a href="http://github.com/dcparker/jquery_plugins/tree/master/quickselect" target="_blank">QuickSelect</a> allows you to convert a standard input form element into a nice dropdown of choices as the user types. As you can see form the example above, it has some great flexibility. I typed &#8220;aber&#8221; into it, and it has found some relatively close matches, rather than exact matches. You can obviously turn this off though, and have it return exactly the string match that you enter.</p>
<p style="text-align: left;"><center><script type="text/javascript"><!--
google_ad_client = "pub-6415056921376217";
google_ad_channel = "in-ad-unit-sq";
google_ui_features = "rc:0";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "";
google_color_url = "0066CC";

//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
<h3 style="text-align: left;">FlexBox</h3>
<p style="text-align: center;"><a href="http://www.fairwaytech.com/flexbox/Default.aspx" target="_blank"><img class="aligncenter size-full wp-image-1137" title="flexbox" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/flexbox.png" alt="flexbox" width="219" height="110" /></a></p>
<p style="text-align: left;"><a href="http://www.fairwaytech.com/flexbox/Default.aspx" target="_blank">FlexBox</a> is another alternative to the standard HTML dropdown box. Much the same as the others, skinnable etc.</p>
<p><strong>LinkSelect</strong></p>
<p style="text-align: center;"><a href="http://www.givainc.com/labs/linkselect_jquery_plugin.htm" target="_blank"><img class="aligncenter size-full wp-image-1138" title="linkselect" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/linkselect.png" alt="linkselect" width="381" height="100" /></a></p>
<p><a href="http://www.givainc.com/labs/linkselect_jquery_plugin.htm" target="_blank">LinkSelect</a> is slightly different in its approach whereby it converts a standard A link tag into a selectable list of options. In theory, that could be a text or image link which is a quite nice addition.</p>
<p><strong>Pop!</strong></p>
<p style="text-align: center;"><a href="http://pop.seaofclouds.com/" target="_blank"><img class="aligncenter size-full wp-image-1140" title="pop" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/pop.png" alt="pop" width="356" height="106" /></a></p>
<p>Whilst not strictly a form dropdown, you get the same effect with the <a href="http://pop.seaofclouds.com/" target="_blank">Pop! jquery plugin</a>. As the screenshot suggests, you can put anything in there, so may not be that great for forms, but you never know!</p>
<h3>jQuery Color Picker</h3>
<p style="text-align: center;"><a href="http://vreboton.ibacolod.com/DotNetNuke/ControlsandTips/jQueryColorPicker/tabid/69/Default.aspx" target="_blank"><img class="aligncenter size-full wp-image-1141" title="colorpicker" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/colorpicker.png" alt="colorpicker" width="447" height="127" /></a></p>
<p>Again, not strictly a dropdown form option, however the <a href="http://vreboton.ibacolod.com/DotNetNuke/ControlsandTips/jQueryColorPicker/tabid/69/Default.aspx" target="_blank">jQuery Color Picker</a> can easily be implemented in the same way to enable the quick selection of HTML colors.</p>
<p>ClickMenu</p>
<p><a href="http://p.sohei.org/jquery-plugins/clickmenu/"><img class="aligncenter size-full wp-image-1142" title="clickmenu" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/clickmenu.png" alt="clickmenu" width="312" height="153" /></a></p>
<p><a href="http://p.sohei.org/jquery-plugins/clickmenu/" target="_blank">ClickMenu</a> is another play on the drill down selectable. Using the plugin is as simple as:</p>
<pre class="brush: jscript;">$('#list').clickMenu();</pre>
<h3>Tools to help you learn&#8230;</h3>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<thead></thead>
<tbody>
<tr>
<td width="33%" align="center" valign="top">
<div id="attachment_613" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847196705?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847196705"><img class="size-full wp-image-613" title="jquery13" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery13.jpg" alt="Learning jQuery 1.3" width="101" height="132" /></a><p class="wp-caption-text">Learning jQuery 1.3</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847196705" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_770" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/B00154JDAI?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00154JDAI"><img class="size-full wp-image-770" title="kindle" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/kindle.jpg" alt="Amazon Kindle 2" width="101" height="132" /></a><p class="wp-caption-text">Amazon Kindle 2</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=B00154JDAI" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_612" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847195121?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847195121"><img class="size-full wp-image-612" title="jquery-ui" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery-ui.jpg" alt="jQuery UI 1.6" width="101" height="132" /></a><p class="wp-caption-text">jQuery UI 1.6</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847195121" border="0" alt="" width="1" height="1" /></td>
</tr>
</tbody>
</table>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2F11-jquery-plugins-to-enhance-html-dropdowns%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2F11-jquery-plugins-to-enhance-html-dropdowns%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/03/11-jquery-plugins-to-enhance-html-dropdowns/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Q&amp;A With jQuery UI Release Manager Richard D. Worth</title>
		<link>http://www.reynoldsftw.com/2009/03/qa-with-jquery-ui-release-manager-richard-d-worth/</link>
		<comments>http://www.reynoldsftw.com/2009/03/qa-with-jquery-ui-release-manager-richard-d-worth/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 16:00:32 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Q&A]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Richard D. Worth]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1118</guid>
		<description><![CDATA[
			
				
			
		
If you haven&#8217;t seen it before, jQuery UI is an awesome layer to the already brilliant jQuery library enabling you to build great, intuitive and interactive Rich Internet Applications. In this Q&#38;A session, Richard D. Worth &#8211; Release Manager with the jQuery UI project answers some questions about his early programming days and the future [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2Fqa-with-jquery-ui-release-manager-richard-d-worth%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2Fqa-with-jquery-ui-release-manager-richard-d-worth%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignright size-full wp-image-1125" title="f242401e6163745fcd773103f794f7fe" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/f242401e6163745fcd773103f794f7fe.jpg" alt="f242401e6163745fcd773103f794f7fe" width="80" height="80" />If you haven&#8217;t seen it before, jQuery UI is an awesome layer to the already brilliant jQuery library enabling you to build great, intuitive and interactive Rich Internet Applications. In this Q&amp;A session, Richard D. Worth &#8211; Release Manager with the jQuery UI project answers some questions about his early programming days and the future of jQuery UI.</p>
<h3>Can you give me a brief history of your programming days? Where did it all start?</h3>
<p>I started programming on an Apple ][e. Basic. Next was assembly on a 286. I was really into demos (if anyone remembers those). My older brothers got me started and we would program on whatever PC my dad upgraded to each year or two. Sometimes we'd even have two, so I'd get to play more freely on the older one. 386, 486. I remember the day we got a math co-processor. Oh, and the turbo button! I programmed in pascal, c, pov-ray, qbasic. What else was fun? BBSes, 1200 baud modem, nic.funet.fi, prodigy, compuserve, Mosaic 1.0. HTML. Ahhh. Thanks for the trip.</p>
<h3>How did you get involved with jQuery UI? What's the story behind that?</h3>
<p>About two years ago I found jQuery and got involved pretty quickly. I started answering questions on the mailing list, created the FAQ, set up <a href="http://planet.jquery.com/" target="_blank">http://planet.jquery.com/</a>. After a couple months I heard news that a new version of Interface was being worked on, called jQuery UI, headed by <a title="Q&amp;A With jQuery Creator Paul Bakaus" href="http://www.reynoldsftw.com/2009/03/questions-with-jquery-ui-creator-paul-bakaus/" target="_blank">Paul Bakaus</a>. At the time I was working on a drag-and-drop tree (the reason I looked for and eventually found jQuery) and a table editor (where you could drag and select TDs, convert them to THs, merge and split cells, etc.). My first contribution to jQuery UI was some documentation and testing for drag and drop. It came pretty easily, because I was making use of them for both these plugins I needed. I had found an unequaled community in jQuery, and was excited about being a part of a new sub-community growing within it: jQuery UI.</p>
<h3>What's next on your things to do list with jQuery UI?</h3>
<p>Testing. Lots of test to be written. Static (markup) tests, visual (interactive) tests, unit tests. My eventual goal is full coverage, obviously. Lots to do yet. Also, I'm really anxious for TestSwarm.</p>
<p>Specifications. We've got a marvelous Development and Planning wiki now (<a href="http://wiki.jqueryui.com/" target="_blank">http://wiki.jqueryui.com/</a>). We're not just writing code when we have cool ideas. We're planning and designing. I'd like to see us get our specifications to a point where they're sufficient for all tests, code, and documentation to be written from them. Even for existing plugins in so-called "maintenance mode". At this point we're still doing a lot based on current implementation. That can take a lot of time and energy, and too often involves reverse engineering. Plus, it's hard to know what someone might be depending on, or foresee an unintended change. The code alone cannot speak for how a component should behave.</p>
<p>New development, perhaps. It's been a while since I've done any new development on jQuery UI. We've been quite focused as a team for the last 9 months on the 1.7 release. In the end it had only one new plugin, progressbar, and it's the simplest one by a long shot. Now that that's out and we're nearing 1.6 final and 1.7.2, we're taking a look toward 1.8, 1.9, and 2.0. We've got some exciting plugins in the works. I'm particularly interested in working on tree, grid, and menu.</p>
<h3>How are you building in performance enhancements into jQuery UI - How do you approach that kind of work?</h3>
<p>I did a bit early on. <a title="Q&amp;A With jQuery Creator Paul Bakaus" href="http://www.reynoldsftw.com/2009/03/questions-with-jquery-ui-creator-paul-bakaus/" target="_blank">Paul</a> did a lot more. I remember sitting down with selectables at one point. I created a page with like 1,000 items. I wanted to be able to drag the selectable lasso as quickly as possible and have all those items light up and down without a skip. I just kept working on it until the numbers got down. Profiling, refactoring, testing on different platforms. Rinse. Repeat.</p>
<h3>Would you say that jQuery, jQuery UI, Mootools and other libraries are forming the basis for what will be the next generation of web applications for the next few years to come? I hesitate to say web 3.0... As the uptake of these gets greater and greater and the feature-set gets even better, the backbone of next generation apps is starting to form I believe. Do you see it that way or do you see a different journey for jQuery and jQuery UI?</h3>
<p>I definitely see that. I'm not sure I had that vision when I started contributing to jQuery UI (I just needed a control or two). But it didn't take long. It's clear that Rich Internet Applications are a valuable and growing area of the web, and of software development in general. One of my personal goals, and I think I share it with the rest of the team, is to make Rich Internet Application development as elegantly simple as jQuery has made Ajax and the DOM.</p>
<h3>What is it about programming that gives you the bug? Is it the need to solve problems? Or the satisfaction in being able to solve complex problems for example...</h3>
<p>I absolutely love problem solving. I always have. I also like the artistic and creative design aspect of programming. For me, too, there's just something about being able to communicate effectively, powerfully even, in the same language with both humans and machines. Code speaks.</p>
<h3>Now that IE8 is well and truly out there, what are your thoughts on the new browser? Any significant issues with jQuery UI?</h3>
<p>I'm quite pleased with what we have in Internet Explorer 8. It's a great web browser. Will IE6 die tomorrow? Will IE8 be my principal development browser? No. But it's a great browser for all users, and it's finally got some decent development tools built-in. So, I'm happy. As far as issues with jQuery UI, no, I haven't seen anything yet. But we kept a pretty close eye on it through the betas.</p>
<h3>What are your tools of choice to get the job done?</h3>
<p>Notepad, UltraEdit, Firefox, Firebug, VirtualBox, TortoiseSVN</p>
<h3>If you hadn't gotten involved with jQuery UI, what do you think you would be doing instead?</h3>
<p>TortoiseGIT</p>
<h3>If you could give one tip to new jQuery UI developers, what would it be?</h3>
<p>Think and talk about the design. Don't just point at an existing plugin's source code, whether you wrote it or not. Dissect it, analyze it, rip it apart, compare it in detail with everything else out there. Do your homework. And then present what you find in such a way that others can benefit from all that effort.</p>
<p><strong>Richard can be found on Twitter as <a href="http://twitter.com/rworth" target="_blank">@rworth</a>, or via his blog at <a href="http://rdworth.org/blog/" target="_blank">http://rdworth.org</a></strong></p>
<h3>Tools to help you learn...</h3>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<thead></thead>
<tbody>
<tr>
<td width="33%" align="center" valign="top">
<div id="attachment_613" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847196705?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847196705"><img class="size-full wp-image-613" title="jquery13" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery13.jpg" alt="Learning jQuery 1.3" width="101" height="132" /></a><p class="wp-caption-text">Learning jQuery 1.3</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847196705" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_770" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/B00154JDAI?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00154JDAI"><img class="size-full wp-image-770" title="kindle" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/kindle.jpg" alt="Amazon Kindle 2" width="101" height="132" /></a><p class="wp-caption-text">Amazon Kindle 2</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=B00154JDAI" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_612" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847195121?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847195121"><img class="size-full wp-image-612" title="jquery-ui" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery-ui.jpg" alt="jQuery UI 1.6" width="101" height="132" /></a><p class="wp-caption-text">jQuery UI 1.6</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847195121" border="0" alt="" width="1" height="1" /></td>
</tr>
</tbody>
</table>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2Fqa-with-jquery-ui-release-manager-richard-d-worth%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2Fqa-with-jquery-ui-release-manager-richard-d-worth%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/03/qa-with-jquery-ui-release-manager-richard-d-worth/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>7 jQuery Plugins to Manipulate TEXTAREAs</title>
		<link>http://www.reynoldsftw.com/2009/03/7-jquery-plugins-to-manipulate-textareas/</link>
		<comments>http://www.reynoldsftw.com/2009/03/7-jquery-plugins-to-manipulate-textareas/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 16:00:34 +0000</pubDate>
		<dc:creator>Steve Reynolds</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[TextArea]]></category>

		<guid isPermaLink="false">http://www.reynoldsftw.com/?p=1111</guid>
		<description><![CDATA[
			
				
			
		
Mark It Up
Mark It Up is an amazingly powerful new jQuery plugin which deserves some significant recognition. It enables you to quickly modify any standard TEXTAREA within your page into a powerful markup editor, like HMTL, BBCode, Textile, Wiki plus much much more&#8230; It&#8217;s so simple that instantiating the editor is as easy as:
$('#html').markItUp(myHtmlSettings);
Website: jaysalvat.com
Download: [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2F7-jquery-plugins-to-manipulate-textareas%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2F7-jquery-plugins-to-manipulate-textareas%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<h3>Mark It Up</h3>
<div id="attachment_1110" class="wp-caption aligncenter" style="width: 490px"><a href="http://markitup.jaysalvat.com/examples/" target="_blank"><img class="size-full wp-image-1110" title="mark-it-up1" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/mark-it-up1.png" alt="Mark It Up Plugin" width="480" height="109" /></a><p class="wp-caption-text">Mark It Up Plugin</p></div>
<p><a href="http://markitup.jaysalvat.com/examples/" target="_blank">Mark It Up</a> is an amazingly powerful new jQuery plugin which deserves some significant recognition. It enables you to quickly modify any standard TEXTAREA within your page into a powerful markup editor, like HMTL, BBCode, Textile, Wiki plus much much more&#8230; It&#8217;s so simple that instantiating the editor is as easy as:</p>
<pre class="brush: jscript;">$('#html').markItUp(myHtmlSettings);</pre>
<p>Website: <a href="http://markitup.jaysalvat.com/examples/" target="_blank">jaysalvat.com</a><br />
Download: <a href="http://markitup.jaysalvat.com/downloads/" target="_blank">markitup pack 1.1.5</a></p>
<h3>ReType</h3>
<p><a href="http://myyn.org/retype/jquery-retype/example/#German" target="_blank"><img class="aligncenter size-full wp-image-1112" title="retype" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/retype.png" alt="retype" width="101" height="28" /></a><a href="http://myyn.org/retype/jquery-retype/example/#German" target="_blank"></a></p>
<p><a href="http://myyn.org/retype/jquery-retype/example/#German" target="_blank">ReType</a> is a really easy to use way to set your TEXTAREAs up with multi language keyboard support without forcing the user to switch keyboard types. The example given show a nice toggle ability on the TEXTAREA allowing the user to input Russian and German in the same textbox with an English keyboard. It also supports ALT key combinations for a very powerful implementation</p>
<p>Website: <a href="http://myyn.org/retype/jquery-retype/example/#German" target="_blank">myyn.org</a><br />
Download: <a href="http://bitbucket.org/miku/jquery-retype/src/" target="_blank">jquery-retype</a></p>
<h3>Modal Preview</h3>
<div id="attachment_1113" class="wp-caption aligncenter" style="width: 448px"><a href="http://devkick.com/lab/modalpreview/" target="_blank"><img class="size-full wp-image-1113" title="modal-preview" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/modal-preview.png" alt="Modal Preview Plugin" width="438" height="119" /></a><p class="wp-caption-text">Modal Preview Plugin</p></div>
<p>Modal Preview is very simple, it gives you the ability to quickly preview the contents of a TEXTAREA submission before sending it off for processing. Implementation allows a few options like allowing HTML, fade animations, opacity and more:</p>
<pre class="brush: jscript;">$('form textarea').modalpreview(options);</pre>
<p>Website: <a href="http://devkick.com/lab/modalpreview/" target="_blank">devkick.com</a><br />
Download: <a href="http://devkick.com/media/js/jquery.modalpreview.js" target="_blank">ModalPreview</a></p>
<h3>Text Input Limiter</h3>
<p>This simple plugin does what a standard TEXTAREA input doesn&#8217;t do &#8211; it allows you to limit the number of characters you can put into it. Whilst the standard INPUT tags allow this in HTML, TEXTAREAs don&#8217;t, so with this plugin you can quickly enable it:</p>
<pre class="brush: jscript;">jQuery(&quot;textarea&quot;).textlimit('span.counter',20)</pre>
<p>Download: <a href="http://plugins.jquery.com/files/textlimit.js_2.txt" target="_blank">textlimit.js</a></p>
<p><center><script type="text/javascript"><!--
google_ad_client = "pub-6415056921376217";
google_ad_channel = "in-ad-unit-sq";
google_ui_features = "rc:0";
google_ad_width = 336;
google_ad_height = 280;
google_ad_format = "336x280_as";
google_ad_type = "text_image";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "";
google_color_url = "0066CC";

//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
<h3>HTMLBox</h3>
<div id="attachment_1114" class="wp-caption aligncenter" style="width: 490px"><a href="http://remiya.com/cms/projects/jquery-plugins/htmlbox/" target="_blank"><img class="size-full wp-image-1114" title="html-box" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/html-box.png" alt="HTMLBox Plugin" width="480" height="77" /></a><p class="wp-caption-text">HTMLBox Plugin</p></div>
<p>HTMLBox is quite similar Mark It Up, although it simply focusses on a standard richtext editor.</p>
<p>Website: <a href="http://remiya.com/cms/projects/jquery-plugins/htmlbox/" target="_blank">remiya.com</a><br />
Download: <a href="http://remiya.com/files/htmlbox/HtmlBox_2.8.zip" target="_blank">HTMLBox 2.8</a></p>
<h3>Resize</h3>
<p><a href="http://www.itsavesyou.com/TextArea_Resizer_example.htm"><img class="aligncenter size-full wp-image-1115" title="resize" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/resize.png" alt="resize" width="238" height="60" /></a>Resize allows you to do just that, resize the TEXTAREA. You need to insert a bit of CSS to give you the nice resize image, but other than that it is quite easy to implement:</p>
<pre class="brush: jscript;">$('textarea.resizable:not(.processed)').TextAreaResizer();</pre>
<p>Website: <a href="http://www.itsavesyou.com/TextArea_Resizer_example.htm" target="_blank">itsavesyou.com</a><br />
Download: <a href="http://plugins.jquery.com/project/TextAreaResizer" target="_blank">TextAreaResize</a></p>
<h3>TypeWatch</h3>
<p><a href="http://www.dennydotnet.com/post/TypeWatch-jQuery-Plugin.aspx" target="_blank">TypeWatch</a> gives you the ability to know when the user has finished typing or has changed some text in a TEXTAREA. Its actually very similar to the events that already come with jQuery, however what it gives you in addition is the ability to say after X milliseconds DO something.</p>
<pre class="brush: jscript;">var options = {

callback:function(){ alert(&quot;changed search text&quot;); },
wait:750,          // milliseconds
highlight:true,     // highlight text on focus
enterkey:true,     // allow &quot;Enter&quot; to submit data on INPUTs
}
$(&quot;#search&quot;).typeWatch( options );</pre>
<p>Website: <a href="http://www.dennydotnet.com/post/TypeWatch-jQuery-Plugin.aspx" target="_blank">dennydotnet.com</a><br />
Download: <a href="http://plugins.jquery.com/files/typewatch.js_0.txt" target="_blank">typewatch.js</a></p>
<h3>Tools to help you learn&#8230;</h3>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<thead></thead>
<tbody>
<tr>
<td width="33%" align="center" valign="top">
<div id="attachment_613" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847196705?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847196705"><img class="size-full wp-image-613" title="jquery13" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery13.jpg" alt="Learning jQuery 1.3" width="101" height="132" /></a><p class="wp-caption-text">Learning jQuery 1.3</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847196705" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_770" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/B00154JDAI?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=B00154JDAI"><img class="size-full wp-image-770" title="kindle" src="http://www.reynoldsftw.com/wp-content/uploads/2009/03/kindle.jpg" alt="Amazon Kindle 2" width="101" height="132" /></a><p class="wp-caption-text">Amazon Kindle 2</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=B00154JDAI" border="0" alt="" width="1" height="1" /></td>
<td width="33%" align="center" valign="top">
<div id="attachment_612" class="wp-caption aligncenter" style="width: 111px"><a href="http://www.amazon.com/gp/product/1847195121?ie=UTF8&amp;tag=stereyblo-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1847195121"><img class="size-full wp-image-612" title="jquery-ui" src="http://www.reynoldsftw.com/wp-content/uploads/2009/02/jquery-ui.jpg" alt="jQuery UI 1.6" width="101" height="132" /></a><p class="wp-caption-text">jQuery UI 1.6</p></div>
<p><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=stereyblo-20&amp;l=as2&amp;o=1&amp;a=1847195121" border="0" alt="" width="1" height="1" /></td>
</tr>
</tbody>
</table>
<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2F7-jquery-plugins-to-manipulate-textareas%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.reynoldsftw.com%2F2009%2F03%2F7-jquery-plugins-to-manipulate-textareas%2F&amp;source=SteveReynolds&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
]]></content:encoded>
			<wfw:commentRss>http://www.reynoldsftw.com/2009/03/7-jquery-plugins-to-manipulate-textareas/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

