<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://www.downcase.com/blog/wp-atom.php">
	<title type="text">Downcase Blog</title>
	<subtitle type="text">On building web products</subtitle>

	<updated>2010-09-28T17:16:07Z</updated>

	<link rel="alternate" type="text/html" href="http://www.downcase.com/blog" />
	<id>http://www.downcase.com/blog/feed/atom</id>
	

	<generator uri="http://wordpress.org/" version="3.0.1">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DowncaseBlog" /><feedburner:info uri="downcaseblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>nakul</name>
					</author>
		<title type="html"><![CDATA[Keyboard fix when using jQuery Autocomplete in Mobile Safari Browser]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DowncaseBlog/~3/hPcqJQexPq8/keyboard-fix-when-using-jquery-autocomplete-in-mobile-safari-browser" />
		<id>http://downcase.com/blog/?p=82</id>
		<updated>2010-07-25T06:02:21Z</updated>
		<published>2010-07-25T06:02:21Z</published>
		<category scheme="http://www.downcase.com/blog" term="Javascript" /><category scheme="http://www.downcase.com/blog" term="Mobile Development" />		<summary type="html"><![CDATA[I was implementing autocomplete functionality in a search form for a iphone app, which is a web mobile application developed using JQTouch and PhoneGap. The search functionality is for searching products in our system. When user enters characters in the search box, they see a drop down list of product suggestions and upon selecting one [...]]]></summary>
		<content type="html" xml:base="http://www.downcase.com/blog/keyboard-fix-when-using-jquery-autocomplete-in-mobile-safari-browser">&lt;p&gt;I was implementing autocomplete functionality in a search form for a iphone app, which is a web mobile application developed using JQTouch and PhoneGap. The search functionality is for searching products in our system. When user enters characters in the search box, they see a drop down list of product suggestions and upon selecting one of the suggestion, I want to send them to the product page directly rather search results page. While implementing this functionality I encountered two problems, which I think most of the web mobile apps will need while making autocomplete for search box. Problem description, its analysis and solution are described below.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; I am using jQuery 1.3.2 and &lt;a href="http://docs.jquery.com/Plugins/Autocomplete/"&gt;autocomplete&lt;/a&gt; plugin.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;The Problem:&lt;/b&gt; Keyboard Toggle. To submit the form when user selects item from autocomplete dropdown, we use the &lt;b&gt;return&lt;/b&gt; handler of autocomplete plugin. But it makes the keyword toggle before taking user to the result page. Let me explain it in detail :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;User starts typeing (using mobile keyboard) and sees product suggestions.&lt;/li&gt;
&lt;li&gt;User selects one of the options and the mobile keyboard goes off.&lt;/li&gt;
&lt;li&gt;Next, the input focus is set which shows the mobile keyboard again.&lt;/li&gt;
&lt;li&gt;Finally result handler is executed which takes user to the product page.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The keyboard toggle in step 2 and 3 is very irritating. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Reason:&lt;/b&gt; I dived into the autocomplete plugin to find the click event attached to the suggestion item, puts the selected value into input box and sets the focus to it. This focus causes the keyboard to toggle. &lt;/p&gt;
&lt;p&gt;&lt;b&gt; Solution: &lt;/b&gt; I carved out the click event and made it an option in the autocomplete plugin. You can either use the default behavior or write custom behaviors when user clicks on one of the suggestion items. Attached below is the diff of the modification to the plugin. You can save this patch and apply it to the autocomplete javascript file.&lt;/p&gt;
&lt;div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"&gt;&lt;table cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"&gt;&lt;div&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"&gt;&lt;span style="color: #CC0000;"&gt;603&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;607c603&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;604&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; $&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;target&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;event&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #660066;"&gt;addClass&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;CLASSES.&lt;span style="color: #660066;"&gt;ACTIVE&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; select&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #006600; font-style: italic;"&gt;// TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; input.&lt;span style="color: #000066;"&gt;focus&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;---&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; elem &lt;span style="color: #339933;"&gt;=&lt;/span&gt; $&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;target&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;event&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; elem.&lt;span style="color: #660066;"&gt;addClass&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;CLASSES.&lt;span style="color: #660066;"&gt;ACTIVE&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;options.&lt;span style="color: #660066;"&gt;clickHandler&lt;/span&gt; &lt;span style="color: #339933;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; options.&lt;span style="color: #660066;"&gt;clickHandler&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;event&lt;span style="color: #339933;"&gt;,&lt;/span&gt; elem&lt;span style="color: #339933;"&gt;,&lt;/span&gt; input&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #339933;"&gt;||&lt;/span&gt; clickHandler&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;event&lt;span style="color: #339933;"&gt;,&lt;/span&gt; elem&lt;span style="color: #339933;"&gt;,&lt;/span&gt; input&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
619a617&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;623&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; clickHandler&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;event&lt;span style="color: #339933;"&gt;,&lt;/span&gt; elem&lt;span style="color: #339933;"&gt;,&lt;/span&gt; input&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt; &amp;nbsp; select&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt; &amp;nbsp; &lt;span style="color: #006600; font-style: italic;"&gt;// TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt; &amp;nbsp; input.&lt;span style="color: #000066;"&gt;focus&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt; &amp;nbsp; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #339933;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;
This patch adds option in autocomplete plugin by the name &lt;b&gt;clickHandler&lt;/b&gt;. The suggested items provided by autocomplete plugin are list items(&amp;#8220;li&amp;#8221; tag) inside a div. The handler provides you three input params:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;event&lt;/b&gt;: The click event.
&lt;li&gt;&lt;b&gt;elem&lt;/b&gt;: The &amp;#8220;li&amp;#8221; element which is clicked.
&lt;li&gt;&lt;b&gt;input&lt;/b&gt;: The input element on which we have attached the autocomplete/we want the autocomplete functionality.
&lt;/ol&gt;
&lt;p&gt;Also, when you click on one of the &amp;#8220;li&amp;#8221; items, you might want to access the data associated with it, the string being visible in dropdown options (or the JSON data if you have fetched JSON from server). To get this data (JSON or string), one can use:&lt;/p&gt;
&lt;div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"&gt;&lt;table cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"&gt;&lt;div&gt;1&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"&gt;$.&lt;span style="color: #660066;"&gt;data&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;elem&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;ac_data&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;This returns the JSON object or the string depending upon what you have associated with list &amp;#8220;li&amp;#8221; item.&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;On suggestion click, user should be directly taken to product page: &lt;/b&gt;The normal behavior is to take user to search results page, but we need to direct user to product page. To implement it, I fetch the product url in autocomplete request along with suggestions using JSON dataType. The autocomplete plugin supports the JSON dataType but its not documented on the plugin page. To consume JSON data, you need to tell autocomplete the value of dataType is JSON and then exploit the &lt;b&gt;parse&lt;/b&gt; function provided by plugin, to convert the JSON data into the format the plugin accepts. Example parse function in my case is as follows:&lt;/p&gt;
&lt;div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"&gt;&lt;table cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"&gt;&lt;div&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"&gt;$&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;'#prodinput'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #660066;"&gt;autocomplete&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;/autocomplete&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; dataType&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;'json'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; parse&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;response&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #006600; font-style: italic;"&gt;//example response:&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #006600; font-style: italic;"&gt;//[&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #006600; font-style: italic;"&gt;// &amp;nbsp;{name:&amp;quot;abc&amp;quot;, url:&amp;quot;/show/1&amp;quot;},&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #006600; font-style: italic;"&gt;// &amp;nbsp;{{name:&amp;quot;def&amp;quot;, url:&amp;quot;/show/2&amp;quot;},&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #006600; font-style: italic;"&gt;// &amp;nbsp;{{name:&amp;quot;ghi&amp;quot;, url:&amp;quot;/show/3&amp;quot;}&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #006600; font-style: italic;"&gt;//]&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; parsed &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; i&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; response.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; parsed&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;parsed.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data&lt;span style="color: #339933;"&gt;:&lt;/span&gt; response&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value&lt;span style="color: #339933;"&gt;:&lt;/span&gt; response&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result&lt;span style="color: #339933;"&gt;:&lt;/span&gt; response&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; parsed&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;You need to return an array of objects, where each object should have 3 keys namely: data, value and result.&lt;/p&gt;
&lt;p&gt;Here, is the final piece of autocomplete I used.&lt;/p&gt;
&lt;div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"&gt;&lt;table cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"&gt;&lt;div&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;6&lt;br /&gt;7&lt;br /&gt;8&lt;br /&gt;9&lt;br /&gt;10&lt;br /&gt;11&lt;br /&gt;12&lt;br /&gt;13&lt;br /&gt;14&lt;br /&gt;15&lt;br /&gt;16&lt;br /&gt;17&lt;br /&gt;18&lt;br /&gt;19&lt;br /&gt;20&lt;br /&gt;21&lt;br /&gt;22&lt;br /&gt;23&lt;br /&gt;24&lt;br /&gt;25&lt;br /&gt;26&lt;br /&gt;27&lt;br /&gt;28&lt;br /&gt;29&lt;br /&gt;30&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"&gt;$&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;'#prodinput'&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #660066;"&gt;autocomplete&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #3366CC;"&gt;&amp;quot;/autocomplete&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; cacheLength&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; max&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #CC0000;"&gt;100&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; width&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #CC0000;"&gt;290&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; dataType&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;'json'&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; selectFirst&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; formatItem&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;item&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #006600; font-style: italic;"&gt;// Make each of the item a link&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;&amp;lt;a href='&amp;quot;&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;item&lt;/span&gt;.&lt;span style="color: #660066;"&gt;url&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;'&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;item&lt;/span&gt;.&lt;span style="color: #000066;"&gt;name&lt;/span&gt; &lt;span style="color: #339933;"&gt;+&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;&amp;lt;/a&amp;gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; parse&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;response&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; parsed &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; i&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; response.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; parsed&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;parsed.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data&lt;span style="color: #339933;"&gt;:&lt;/span&gt; response&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value&lt;span style="color: #339933;"&gt;:&lt;/span&gt; response&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; result&lt;span style="color: #339933;"&gt;:&lt;/span&gt; response&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;i&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; parsed&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; clickHandler&lt;span style="color: #339933;"&gt;:&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;event&lt;span style="color: #339933;"&gt;,&lt;/span&gt; elem&lt;span style="color: #339933;"&gt;,&lt;/span&gt; input&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; elem.&lt;span style="color: #660066;"&gt;parent&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #660066;"&gt;parent&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #660066;"&gt;hide&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000066; font-weight: bold;"&gt;try&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; $&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;input&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #660066;"&gt;val&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;$.&lt;span style="color: #660066;"&gt;data&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;elem&lt;span style="color: #009900;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #CC0000;"&gt;0&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; &lt;span style="color: #3366CC;"&gt;&amp;quot;ac_data&amp;quot;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #000066;"&gt;name&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; $&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;input&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #660066;"&gt;parent&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #660066;"&gt;submit&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;catch&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;e&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #009900;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #000066;"&gt;alert&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#40;&lt;/span&gt;e.&lt;span style="color: #660066;"&gt;message&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #009900;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #009900;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/DowncaseBlog/~4/hPcqJQexPq8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.downcase.com/blog/keyboard-fix-when-using-jquery-autocomplete-in-mobile-safari-browser#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.downcase.com/blog/keyboard-fix-when-using-jquery-autocomplete-in-mobile-safari-browser/feed/atom" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.downcase.com/blog/keyboard-fix-when-using-jquery-autocomplete-in-mobile-safari-browser</feedburner:origLink></entry>
		<entry>
		<author>
			<name>nakul</name>
					</author>
		<title type="html"><![CDATA[Comparison of Mobile Barcode Scanners]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DowncaseBlog/~3/6gy2QSDh-Kk/comparison-of-mobile-barcode-scanners" />
		<id>http://downcase.com/blog/?p=35</id>
		<updated>2010-09-28T17:16:07Z</updated>
		<published>2010-07-06T11:05:45Z</published>
		<category scheme="http://www.downcase.com/blog" term="Mobile Development" />		<summary type="html"><![CDATA[I have been assigned a task to find a barcode scanner library which works for iphone, android and blackberry and is good in performance (accuracy + speed). After searching extensively, listed are the meaningful barcode scanning software in the market followed by my analysis on them:
<ol>
	<li>RedLaser (Very Famous)</li>
	<li>Zbar</li>
	<li>FreeBarcodeScanner (by Shopsavvy)</li>
	<li>Zxing (used by Google Shopper App for Android)</li>
	<li>Pic2Shop (or VisionSmarts)</li>
	<li>QuickMark</li>
</ol>
<strong><a href="http://www.redlaser.com/" target="_blank">Redlaser</a></strong> is the best paid barcode scanner app in the market, though expensive. Its Iphone only. They require 10% of sales if you use their library for a paid iphone application with a minimum license fee of $2500. For detailed pricing have a look at <a title="Redlaser Pricing" href="http://www.redlaser.com/Pricing.aspx">Redlaser Pricing</a> . Our experiments say, its a very powerful and accurate barcode scanner that outperforms all the other mobile barcode scanners. Redlaser is equally accurate on both Iphone 3G &#38; 3GS, while being super quick on 3GS because of the autofocus support. If you find a app in itunes store having awesome barcode functionality, I am almost sure it will be leveraging RedLaser technology. For development, their SDK is available at 50$ which comes with a demo scanner app that works out of box and displays the power of their technology. There is little documentation on Redlaser SDK, so you may face some difficulty adding it to your application. RedLaser recently got <a href="http://techcrunch.com/2010/06/23/ebay-acquires-barcode-scanning-iphone-app-redlaser/">acquired by Ebay</a>.]]></summary>
		<content type="html" xml:base="http://www.downcase.com/blog/comparison-of-mobile-barcode-scanners">&lt;p&gt;I have been assigned a task to find a barcode scanner library which works for iphone, android and blackberry and is good in performance (accuracy + speed). After searching extensively, listed are the meaningful barcode scanning software in the market followed by my analysis on them:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;RedLaser (Very Famous)&lt;/li&gt;
&lt;li&gt;Zbar&lt;/li&gt;
&lt;li&gt;FreeBarcodeScanner (by Shopsavvy)&lt;/li&gt;
&lt;li&gt;Zxing (used by Google Shopper App for Android)&lt;/li&gt;
&lt;li&gt;Pic2Shop (or VisionSmarts)&lt;/li&gt;
&lt;li&gt;QuickMark&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.redlaser.com/" target="_blank"&gt;Redlaser&lt;/a&gt;&lt;/strong&gt; is the best paid barcode scanner app in the market, though expensive. Its Iphone only. They require 10% of sales if you use their library for a paid iphone application with a minimum license fee of $2500. For detailed pricing have a look at &lt;a title="Redlaser Pricing" href="http://www.redlaser.com/Pricing.aspx"&gt;Redlaser Pricing&lt;/a&gt; . Our experiments say, its a very powerful and accurate barcode scanner that outperforms all the other mobile barcode scanners. Redlaser is equally accurate on both Iphone 3G &amp;amp; 3GS, while being super quick on 3GS because of the autofocus support. If you find a app in itunes store having awesome barcode functionality, I am almost sure it will be leveraging RedLaser technology. For development, their SDK is available at 50$ which comes with a demo scanner app that works out of box and displays the power of their technology. There is little documentation on Redlaser SDK, so you may face some difficulty adding it to your application. RedLaser recently got &lt;a href="http://techcrunch.com/2010/06/23/ebay-acquires-barcode-scanning-iphone-app-redlaser/"&gt;acquired by Ebay&lt;/a&gt;.&lt;br /&gt;
&lt;span id="more-35"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.freebarcodescanner.com/?p=2639" target="_blank"&gt;Free Barcode scanner&lt;/a&gt;&lt;/strong&gt; is the best among the freely available options. It works on both Iphone &amp;amp; Android. Support for Windows mobile, blackberry &amp;amp; symbian is under &lt;strong&gt;active&lt;/strong&gt; development. It was recently released by Big in Japan, makers of the &lt;a href="http://techcrunch.com/2009/11/17/shopsavvy-iphone/" target="_blank"&gt;shopsavvy&lt;/a&gt; app for Iphone &amp;amp; Android.  It works smoothly with all versions of iphone and performs almost similar to RedLaser. It comes with a demo app to aid in development/testing. ShopSavvy has another big advantage over RedLaser, as it installs perfectly fine on the iphone 3.0 firmware. Whereas, RedLaser is only available for 3.1+.&lt;/p&gt;
&lt;p&gt;Camera with &lt;strong&gt;autofocus&lt;/strong&gt; is usually a must requirement for most of the barcode scanners in the market. Whereas, FreeBarcodeScanner is build on top of open source zxing library, which does not require autofocus camera. Android G1 did not have focus control, so zxing library from google had to innovate to allow the fixed camera lens to change focal length in software &lt;img src='http://www.downcase.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /&gt;  , which is really cool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://zbar.sourceforge.net/" target="_blank"&gt;Zbar&lt;/a&gt;&lt;/strong&gt; is another open source option, but only works with 3GS+ phones. Not much used and talked about.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/zxing/" target="_blank"&gt;Zxing&lt;/a&gt;&lt;/strong&gt; is an open source option which only works with android. Its used by Google shoppers app for Android. The iphone port of java code only scans qrcodes and data matrixes. And, there is no active development for porting rest of the code. So not of much use to iphone development guys like us.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.visionsmarts.com/products/products.html" target="_blank"&gt;Pic2Shop&lt;/a&gt;&lt;/strong&gt; is another paid option. It works quite well, though poorer than both Redlaser and freebarcode scanner. Works with all versions of iphone and android. Vision Smarts charges a price of $7000 USD and 10% of sale price.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.quickmark.com.tw/En/basic/downloadSDK.asp" target="_blank"&gt;QuickMark&lt;/a&gt;&lt;/strong&gt; is available for iphone, android and windows mobile.&lt;/p&gt;
&lt;p&gt;Other tried : &lt;a href="http://www.i-nigma.com/Downloadi-nigmaReader.html" target="_blank"&gt;3G Vision&amp;#8217;s i-nigma&lt;/a&gt; &amp;amp; &lt;a href="http://stefan.hafeneger.name/category/barcode-app/" target="_blank"&gt;barcodeapp&lt;/a&gt;(only works for qr and datamatrix codes). Both are pathetic, hardly scans anything.&lt;/p&gt;
&lt;p&gt;Then there is visual product search software &lt;a title="Snaptell" href="http://www.snaptell.com/"&gt;&lt;strong&gt;Snaptell&lt;/strong&gt;&lt;/a&gt;, which is more of image matching software. You take a pic of book/movie box and if it matches in their database, you get the results.&lt;/p&gt;
&lt;h3&gt;Test Results&lt;/h3&gt;
&lt;p&gt;We have done experiments of Redlaser, Freebarcodescanner, Zbar and pic2shop on Iphone 3G &amp;amp; Iphone 3GS. Android testing results will be coming soon.&lt;/p&gt;
&lt;p&gt;Our test sample consists of 8 barcodes on computer of various sizes &amp;amp; 6 real products with barcode of various sizes. For each pair of (scanner app, device), the result is number of successful scans and total time taken.&lt;/p&gt;
&lt;h4&gt;On Iphone 3G&lt;/h4&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product&lt;/th&gt;
&lt;th&gt;Barcodes on computer&lt;/th&gt;
&lt;th&gt;Barcodes on real products&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;match count, time taken&lt;/th&gt;
&lt;th&gt;match count, time taken&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redlaser&lt;/td&gt;
&lt;td&gt;5/8, 2mins&lt;/td&gt;
&lt;td&gt;5/6, 2mins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FreeBarcodeScanner&lt;/td&gt;
&lt;td&gt;6/8, 4mins&lt;/td&gt;
&lt;td&gt;3/6, 2mins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pic2shop&lt;/td&gt;
&lt;td&gt;5/8, 3mins&lt;/td&gt;
&lt;td&gt;&amp;#8211;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;On Iphone 3GS&lt;/h4&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Product&lt;/th&gt;
&lt;th&gt;Barcodes on real products : match count, time taken&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redlaser&lt;/td&gt;
&lt;td&gt;6/6, 1min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FreeBarcodeScanner&lt;/td&gt;
&lt;td&gt;6/6, 1.5min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zbar&lt;/td&gt;
&lt;td&gt;3/6, 3min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;img src="http://feeds.feedburner.com/~r/DowncaseBlog/~4/6gy2QSDh-Kk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.downcase.com/blog/comparison-of-mobile-barcode-scanners#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.downcase.com/blog/comparison-of-mobile-barcode-scanners/feed/atom" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.downcase.com/blog/comparison-of-mobile-barcode-scanners</feedburner:origLink></entry>
	</feed>

