<?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>Christoph Schüßler &#187; selector</title>
	<atom:link href="http://herr-schuessler.de/blog/tags/selector/feed/" rel="self" type="application/rss+xml" />
	<link>http://herr-schuessler.de/blog</link>
	<description>Dev-Blog</description>
	<lastBuildDate>Sat, 10 Sep 2011 11:55:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Selecting input-fields with maxlength via jQuery</title>
		<link>http://herr-schuessler.de/blog/selecting-input-fields-with-maxlength-via-jquery/</link>
		<comments>http://herr-schuessler.de/blog/selecting-input-fields-with-maxlength-via-jquery/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 04:37:18 +0000</pubDate>
		<dc:creator>Christoph Schüßler</dc:creator>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[HTML & CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[browser quirks]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[maxlength]]></category>
		<category><![CDATA[selector]]></category>

		<guid isPermaLink="false">http://herr-schuessler.de/?p=178</guid>
		<description><![CDATA[524288? 2147483647? -1? No, that&#8217;s not my bank account balance&#8230; Unlike any other attribute, maxlength is implicitly present on any input-element. I had to find this out the hard way trying to select only input-elements with an explicitly set maxlength &#8230; <a href="http://herr-schuessler.de/blog/selecting-input-fields-with-maxlength-via-jquery/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
524288?<br />
2147483647?<br />
-1?<br />
No, that&#8217;s not my bank account balance&#8230;
</p></blockquote>
<p>Unlike any other attribute, <code>maxlength</code> is implicitly present on any <code>input</code>-element. I had to find this out the hard way trying to select only <code>input</code>-elements with an explicitly set <code>maxlength</code> via the jQuery-selector <code>input[maxlength]</code>.<br />
<span id="more-178"></span></p>
<p>Well, that didn&#8217;t work. <code>input[maxlength]</code> returns all inputs, regardless of whether they have <code>maxlength</code> or not. The only conclusion this leaves us with is that <strong>browsers add a certain maxlength-value implicitly</strong> to any <code>input</code>-field.</p>
<h4>What&#8217;s my browser doing with maxlength?</h4>
<p>That&#8217;s exactly what I asked myself. <a href="http://dev.herr-schuessler.de/examples/maxlength-test/">A quick browser test</a> left me quite surprised, but, hey &ndash; what did I expect &#8211; every browser behaving the same? Not in this world&#8230;</p>
<p>Every browser rendering engine implies a different value. The most reasonable browsers are Firefox (surprised?) and Opera &#8211; they are at least assuming a negative value. The other values <del>seem (at least to me, maybe I&#8217;m just missing some nerdy inside joke) completely arbitrary</del> are natural limits: 2147483647 is the highest possible 32-bit-number (<code>2^32 /2</code> or <code>0111 1111 1111 1111 1111 1111 1111 1111</code>), while 524288 is the same in 16 bit:</p>
<table class="table">
<tr>
<th>Browser</th>
<th>OS</th>
<th>Version</th>
<th>Implicit maxlength-value</th>
</tr>
<tr>
<td>Firefox</td>
<td>Windows</td>
<td>3</td>
<td class="hilite">-1</td>
</tr>
<tr>
<td>Internet Explorer</td>
<td>Windows</td>
<td>7</td>
<td class="hilite">2147483647</td>
</tr>
<tr>
<td>Safari</td>
<td>Windows</td>
<td>3.2</td>
<td class="hilite">524288</td>
</tr>
<tr>
<td>Opera</td>
<td>Windows</td>
<td>9.6</td>
<td class="hilite">-1</td>
</tr>
<tr>
<td>Chrome</td>
<td>Windows</td>
<td>0.4</td>
<td class="hilite">524288</td>
</tr>
</table>
<h4>jQuery to the rescue</h4>
<p>So back to the original problem &#8211; my solution for selecting only <code>input</code>-fields with <code>maxlength</code>-attributes based on these findings is as follows:</p>
<pre name="code" class="js">
var inputs = $('input[maxlength!=-1][maxlength!=524288][maxlength!=2147483647]');
</pre>
<p>Ugly, I know. But it works.</p>
<p><a class="download" href="http://dev.herr-schuessler.de/examples/maxlength-test/">Take the <em>Browser Test</em><br />
and post your result in the comment section!</a></p>
<h4>Why?</h4>
<p>Why would I want to select only this subset of input elements anyway? In my case, it was to <a href="http://www.bradlis7.com/main/jquery-chars-remaining">display the number of total and remaining characters a user could enter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://herr-schuessler.de/blog/selecting-input-fields-with-maxlength-via-jquery/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

