Hello,<div><br></div><div>Also consider using AHAH Helper (<a href="http://www.drupal.org/project/ahah_helper">http://www.drupal.org/project/ahah_helper</a>) module which significantly simplifies the usage of AHAH. Using AHAH Helper you only need to implement o form building function and submit/validate callbacks. The module comes with example module which explains the basic usage of its API.<br clear="all">
<br><div>--<div>Kindest regards,<br>Adam Ludwinski</div><div>Weever Web Warehouse<br>mobile: +48 606 107 297<br><a href="mailto:adam.ludwinski@weever.net" target="_blank">adam.ludwinski@weever.net</a><br><a href="http://www.weever.net/" target="_blank">http://www.weever.net</a></div>
<div><span style="border-collapse:collapse;font-family:arial, sans-serif;font-size:13px">Al. Jerozolimskie 87 piêtro 2<br>02-001 Warszawa</span></div><div><br></div><div><br></div><div><span style="border-collapse:collapse;font-family:arial, sans-serif;font-size:13px">____________________________________________<br>
<br>Niniejsza wiadomosc wraz z ewentualnymi zalacznikami jest poufna i<br>stanowi prawnie zastrzezona korespondencje przeznaczona wylacznie dla<br>jej odbiorcy. Jesli odbiorca tej wiadomosci nie jest jej adresatem,<br>niniejszym informujemy, ze otrzymali ja Panstwo omylkowo. W zwiazku z<br>
tym prosimy o niezwloczne powiadomienie o tym nadawcy zwrotna poczta<br>elektroniczna oraz o usuniecie otrzymanej wiadomosci wraz z<br>ewentualnymi zalacznikami.<br><br>This e-mail message with any attached files is confidential and as a<br>
legally privileged correspondence is assigned exclusively for<br>recipient. If you are not intended recipient we inform that delivery<br>is made by mistake. Please notify the sender immediately and then<br>delete this e-mail with all attachments.<br>
____________________________________________</span></div></div><br>
<br><br><div class="gmail_quote">On 11 March 2011 09:12, Austin Einter <span dir="ltr">&lt;<a href="mailto:austin.einter@gmail.com">austin.einter@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>Thanks Randy.</div>
<div>I will try to use those examples as a starting point.</div>
<div> </div>
<div>Thanks</div>
<div>Austin<font color="#888888"><br><br></font></div><div><div></div><div class="h5">
<div class="gmail_quote">On Fri, Mar 11, 2011 at 11:59 AM, Randy Fay <span dir="ltr">&lt;<a href="mailto:randy@randyfay.com" target="_blank">randy@randyfay.com</a>&gt;</span> wrote:<br>
<blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex" class="gmail_quote">Please start your investigations using the AHAH Example in the<br>Examples Project (<a href="http://drupal.org/project/examples" target="_blank">http://drupal.org/project/examples</a>) and<br>

<a href="http://randyfay.com/ahah" target="_blank">http://randyfay.com/ahah</a>. If you build a form starting with that<br>foundation, then please come back for help at that point.<br><br>Thanks,<br>-Randy<br>
<div>
<div></div>
<div><br>On Thu, Mar 10, 2011 at 9:10 PM, Austin Einter &lt;<a href="mailto:austin.einter@gmail.com" target="_blank">austin.einter@gmail.com</a>&gt; wrote:<br>&gt; Hi All<br>&gt; I am quite new to AHAH, strugling to find how it works. I referred<br>

&gt; documentation and poll module.<br>&gt; I want 3 fields in a fieldset, Company, Start-Date, End-Date.<br>&gt;<br>&gt; I have a button &quot;Add More Company&quot;, if clicked, it should add a new row<br>&gt; having Company, Start-Date, End-Date dynamically.<br>

&gt; How many times user clicks, those many rows needs to be added.<br>&gt;<br>&gt; To get the above mentioned form, I have put the code as below.<br>&gt; However, on button click, new rows are not adding up.<br>&gt;<br>
&gt; Please help me to find whats the error with code.<br>
&gt;<br>&gt; Regards,<br>&gt; Austin<br>&gt;<br>&gt; Code<br>&gt; ===============================================<br>&gt; &lt;?php<br>&gt; function submitresume_menu() {<br>&gt;  $items = array();<br>&gt;  $items[&#39;submitresume/form&#39;] = array(<br>

&gt;  &#39;title&#39; =&gt; t(&#39;Submit Your Resume&#39;),<br>&gt;  &#39;page callback&#39; =&gt; &#39;submitresume_form&#39;,<br>&gt;  &#39;access arguments&#39; =&gt; array(&#39;access content&#39;),<br>&gt;  &#39;description&#39; =&gt; t(&#39;Submit Your Resume&#39;),<br>

&gt;  &#39;type&#39; =&gt; MENU_CALLBACK,<br>&gt;  );<br>&gt;  $items[&#39;submitresume/form/morecompanies&#39;] = array(<br>&gt;  &#39;page callback&#39; =&gt; &#39;submitresume_add_more_companies&#39;,<br>&gt;  &#39;access arguments&#39; =&gt; array(&#39;access content&#39;),<br>

&gt;  &#39;type&#39; =&gt; MENU_CALLBACK,<br>&gt;  );<br>&gt;  return $items;<br>&gt; }<br>&gt; function submitresume_form() {<br>&gt;  return drupal_get_form(&#39;submitresume_my_form&#39;);<br>&gt; }<br>&gt; function submitresume_my_form($form_state) {<br>

&gt;  $form = array(&#39;#cache&#39; =&gt; TRUE,);<br>&gt;  if (isset($form_state[&#39;all_companies&#39;])) {<br>&gt;   $all_companies = $form_state[&#39;all_companies&#39;];<br>&gt;  }<br>&gt;  else {<br>&gt;   $all_companies = 1;<br>

&gt;  }<br>&gt;  //Add a wrapper for the companies and add more button.<br>&gt;  $form[&#39;work_history_wrapper&#39;] = array(<br>&gt;   &#39;#title&#39; =&gt; t(&quot;Work history: Mention all the companies you gave worked so<br>

&gt; far&quot;),<br>&gt;   &#39;#type&#39; =&gt; &#39;fieldset&#39;,<br>&gt;   &#39;#collapsible&#39; =&gt; TRUE,<br>&gt;   &#39;#collapsed&#39; =&gt; FALSE,<br>&gt;   &#39;#prefix&#39; =&gt; &#39;&lt;div class=&quot;clear-block&quot; id=&quot;work-history-wrapper&quot;&gt;&#39;,<br>

&gt;   &#39;#suffix&#39; =&gt; &#39;&lt;/div&gt;&#39;,<br>&gt;  );<br>&gt;  //Container for just companies<br>&gt;  $form[&#39;work_history_wrapper&#39;][&#39;allcompanies&#39;] = array(<br>&gt;   &#39;#prefix&#39; =&gt; &#39;&lt;div id=&quot;all-companies&quot;&gt;&#39;,<br>

&gt;   &#39;#suffix&#39; =&gt; &#39;&lt;/div&gt;&#39;,<br>&gt;  );<br>&gt;  for ($delta = 0; $delta &lt; $all_companies; $delta++)<br>&gt;  {<br>&gt;   //Need to do: Get the company name, start date and end date, pass it to<br>

&gt; submitresume_add_one_company_form, so that it is shown properly<br>&gt;   $form[&#39;work_history_wrapper&#39;][&#39;allcompanies&#39;][$delta] =<br>&gt; submitresume_add_one_company_form($delta, $company_name, $compsdt,<br>

&gt; $compedt);<br>&gt;  }<br>&gt;  $form[&#39;work_history_wrapper&#39;][&#39;morecompany&#39;] = array(<br>&gt;   &#39;#type&#39; =&gt; &#39;button&#39;,<br>&gt;   &#39;#value&#39; =&gt; t(&#39;Add More Companies&#39;),<br>

&gt;   &#39;#weight&#39; =&gt; 1,<br>&gt;   &#39;#submit&#39; =&gt; array(&#39;add_more_companies_submit&#39;), // If no javascript<br>&gt; action.<br>&gt;   &#39;#ahah&#39; =&gt; array(<br>&gt;    &#39;path&#39; =&gt; &#39;submitresume/form/morecompanies&#39;,<br>

&gt;    &#39;wrapper&#39; =&gt; &#39;all-companies&#39;,<br>&gt;    &#39;method&#39; =&gt; &#39;replace&#39;,<br>&gt;    &#39;effect&#39; =&gt; &#39;fade&#39;,<br>&gt;   ),<br>&gt;  );<br>&gt;<br>&gt; $form[&#39;submit&#39;] = array(<br>

&gt; &#39;#type&#39; =&gt; &#39;submit&#39;,<br>&gt; &#39;#value&#39; =&gt; &#39;Submit&#39;,<br>&gt; );<br>&gt; return $form;<br>&gt; }<br>&gt; function submitresume_add_one_company_form($delta, $company_name, $compsdt,<br>

&gt; $compedt) {<br>&gt;  $form = array(<br>&gt;   &#39;#tree&#39; =&gt; TRUE,<br>&gt;  );<br>&gt;  $form[&#39;companies&#39;] = array(<br>&gt;   &#39;#type&#39; =&gt; &#39;textfield&#39;,<br>&gt;   &#39;#title&#39; =&gt; t(&#39;Company&#39;).&quot;-&quot;.$delta,<br>

&gt;   &#39;#parents&#39; =&gt; array(&#39;allcompanies&#39;, $delta, &#39;companies&#39;),<br>&gt;   &#39;#size&#39; =&gt; 30,<br>&gt;   &#39;#maxlength&#39; =&gt; 100,<br>&gt;  );<br>&gt;  $form[&#39;startdate&#39;] = array(<br>

&gt;   &#39;#type&#39; =&gt; &#39;date&#39;,<br>&gt;   &#39;#title&#39; =&gt; t(&#39;Start Date&#39;),<br>&gt;   &#39;#parents&#39; =&gt; array(&#39;allcompanies&#39;, $delta, &#39;startdate&#39;),<br>&gt;  );<br>&gt;  $form[&#39;enddate&#39;] = array(<br>

&gt;   &#39;#type&#39; =&gt; &#39;date&#39;,<br>&gt;   &#39;#title&#39; =&gt; t(&#39;End Date&#39;),<br>&gt;   &#39;#parents&#39; =&gt; array(&#39;allcompanies&#39;, $delta, &#39;enddate&#39;),<br>&gt;  );<br>&gt;  return $form;<br>

&gt; }<br>&gt; function add_more_companies_submit($form, &amp;$form_state) {<br>&gt;  // Set the form to rebuild and run submit handlers.<br>&gt;  node_form_submit_build_node($form, $form_state);<br>&gt;  // Make the changes we want to the form state.<br>

&gt;  if ($form_state[&#39;values&#39;][&#39;morecompany&#39;]) {<br>&gt;   $n = $_GET[&#39;q&#39;] == &#39;submitresume/form/morecompanies&#39; ? 1 : 5;<br>&gt;   $form_state[&#39;all_companies&#39;] =<br>&gt; count($form_state[&#39;values&#39;][&#39;allcompanies&#39;]) + $n;<br>

&gt;  }<br>&gt; }<br>&gt; function  submitresume_add_more_companies() {<br>&gt;  include_once &#39;modules/node/node.pages.inc&#39;;<br>&gt;  $form_state = array(&#39;storage&#39; =&gt; NULL, &#39;submitted&#39; =&gt; FALSE);<br>

&gt;  $form_build_id = $_POST[&#39;form_build_id&#39;];<br>&gt;  // Get the form from the cache.<br>&gt;  $form = form_get_cache($form_build_id, $form_state);<br>&gt;  $args = $form[&#39;#parameters&#39;];<br>&gt;  $form_id = array_shift($args);<br>

&gt;  // We will run some of the submit handlers so we need to disable<br>&gt; redirecting.<br>&gt;  $form[&#39;#redirect&#39;] = FALSE;<br>&gt;  // We need to process the form, prepare for that by setting a few internals<br>

&gt;  // variables.<br>&gt;  $form[&#39;#post&#39;] = $_POST;<br>&gt;  $form[&#39;#programmed&#39;] = FALSE;<br>&gt;  $form_state[&#39;post&#39;] = $_POST;<br>&gt;  // Build, validate and if possible, submit the form.<br>

&gt;  drupal_process_form($form_id, $form, $form_state);<br>&gt;  // This call recreates the form relying solely on the form_state that the<br>&gt;  // drupal_process_form set up.<br>&gt;  $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);<br>

&gt;  // Render the new output.<br>&gt;  $choice_form = $form[&#39;work_history_wrapper&#39;][&#39;allcompanies&#39;];<br>&gt;  unset($choice_form[&#39;#prefix&#39;], $choice_form[&#39;#suffix&#39;]); // Prevent<br>&gt; duplicate wrappers.<br>

&gt;  $output = theme(&#39;status_messages&#39;) . drupal_render($choice_form);<br>&gt;  drupal_json(array(&#39;status&#39; =&gt; TRUE, &#39;data&#39; =&gt; $output));<br>&gt; }<br>&gt; function submitresume_validate($form, &amp;$form_state) {<br>

&gt; }<br>&gt; function submitresume_submit($form, &amp;$form_state) {<br>&gt; drupal_set_message(t(&#39;The form has been submitted.&#39;));<br>&gt; }<br>&gt; ?&gt;<br>&gt;<br><br><br><br></div></div><font color="#888888">--<br>

Randy Fay<br>Drupal Module and Site Development<br><a href="mailto:randy@randyfay.com" target="_blank">randy@randyfay.com</a><br>+1  970.462.7450<br></font></blockquote></div><br>
</div></div></blockquote></div><br></div>