<?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>Yet another blog about PHP, HTML and CSS &#187; jQuery</title>
	<atom:link href="http://blog.pepa.info/php-html-css/category/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pepa.info</link>
	<description>Petr 'PePa' Pavel</description>
	<lastBuildDate>Thu, 19 Aug 2010 18:17:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Duplicating sets of radio buttons with jQuery</title>
		<link>http://blog.pepa.info/php-html-css/jquery/duplicating-sets-of-radio-buttons-with-jquery/</link>
		<comments>http://blog.pepa.info/php-html-css/jquery/duplicating-sets-of-radio-buttons-with-jquery/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 18:02:54 +0000</pubDate>
		<dc:creator>Petr 'PePa' Pavel</dc:creator>
				<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://blog.pepa.info/?p=129</guid>
		<description><![CDATA[We all love the &#8220;add more&#8221; links for adding more form items to forms. More pictures to upload, more categories to add. You just name them with empty square brackets and then clone them. &#160; &#60;input type=&#34;file&#34; name=&#34;file[]&#34; value=&#34;&#34;&#62; &#60;a href=&#34;&#34; id=&#34;addMoreUploads&#34;&#62;add more&#60;/a&#62; &#160; But what if you need to clone sets of radio buttons? [...]]]></description>
			<content:encoded><![CDATA[<p>We all love the &#8220;add more&#8221; links for adding more form items to forms. More pictures to upload, more categories to add. You just name them with empty square brackets and then clone them. </p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;input type=&quot;file&quot; name=&quot;file[]&quot; value=&quot;&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;a href=&quot;&quot; id=&quot;addMoreUploads&quot;&gt;add more&lt;/a&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>But what if you need to clone sets of radio buttons? You end up with a single group of radio buttons &#8211; not with a group of radio button groups.<br />
<span id="more-129"></span></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;div class=&quot;moreContainer&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;div class=&quot;cloneThis set&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;input type=&quot;radio&quot; name=&quot;options[]&quot; value=&quot;1&quot;&gt; one
</div>
</li>
<li class="li2">
<div class="de2">&lt;input type=&quot;radio&quot; name=&quot;options[]&quot; value=&quot;2&quot;&gt; two
</div>
</li>
<li class="li1">
<div class="de1">&lt;input type=&quot;radio&quot; name=&quot;options[]&quot; value=&quot;3&quot;&gt; three
</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;a href=&quot;&quot; class=&quot;addMore&quot;&gt;add more&lt;/a&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>If you clone the whole cloneThis group you&#8217;ll get a group of six radio buttons but you&#8217;ll be able to choose just one.</p>
<p>Unfortunately, you have to give up the empty square brackets and start numbering them (name=&#8221;options[0]&#8220;). In the cloning function then you replace the cloned number with an ever increasing counter value.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&quot;.addMore&quot;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">var</span> parentContainer = $<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>.<span class="me1">parents</span><span class="br0">&#40;</span><span class="st0">&quot;.moreContainer&quot;</span><span class="br0">&#41;</span>.<span class="me1">eq</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// the closest container (you can have nested containers too)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> cloneSource = parentContainer.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.cloneThis&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> clonedSet = cloneSource.<span class="me1">clone</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">// duplicate the set of form items</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">var</span> itemsCount = parentContainer.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;.set&quot;</span><span class="br0">&#41;</span>.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// count # of already duplicated sets</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="coMULTI">/*</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp; &nbsp;* Increment index of each for item</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;* we can&#8217;t use [] because of radio buttons</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; clonedSet.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>index, element<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">name</span> = <span class="kw1">this</span>.<span class="kw3">name</span>.<span class="me1">replace</span><span class="br0">&#40;</span><span class="re0">/\<span class="br0">&#91;</span><span class="nu0">0</span>\<span class="br0">&#93;</span>/</span>, <span class="st0">&quot;[&quot;</span>+itemsCount+<span class="st0">&quot;]&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// &nbsp; &nbsp;$(element).val(itemsCount); // this works as a debugger for type=&quot;text&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; clonedSet.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&quot;cloneThis&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// remove class &#8216;cloneThis&#8217; to avoid duplicating it in the next round</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// &nbsp; &nbsp;clonedSet.find(&quot;input[name*='zoom'][value=3]&quot;).attr(&quot;checked&quot;, true); ;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// use this syntax to set a default value</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; cloneSource.<span class="me1">after</span><span class="br0">&#40;</span>clonedSet<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
</ol>
</div>
<p>This function is generic and works for any set of input fields (not textarea and select though). You can have many &#8220;add this&#8221; and &#8220;add that&#8221; on a single page and still use the same function. You just have to switch from using id to class for identifying the containers, links and cloning sources.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pepa.info/php-html-css/jquery/duplicating-sets-of-radio-buttons-with-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
