Drupal 7 submit function not called for themed form I am developing a form. 2 functions are:

function reserve_multi_step_form($form, &amp;$form_state)
{
       $module_path = drupal_get_path('module', 'reserve');

       $form['#theme'] = 'reserve_form_2';
       $form["agreed"] = array(
                            '#type' =&gt; 'checkbox',
                            '#title' =&gt; t("I accept the deposit policy"),
                            '#attributes' =&gt; array("onChange" =&gt; "policy_accepted();"),
                            );


       $form['submit'] = array(
                       '#type' =&gt; 'submit',
                       '#value' =&gt; t('Submit'),
                       '#attributes' =&gt; array('style' =&gt; "padding: 0 10px;"),
                       "#disabled" =&gt; true,
                       );

       return $form;
    }

function reserve_multi_step_form_submit($form, &amp;$form_state) {
       print 1111;exit;
}


The theme function:

function reserve_theme($existing, $type, $theme, $path){
   return array(
                'reserve_form_2' =&gt; array(
                                          'render element' =&gt; 'form',
                                          'template' =&gt; 'reserve_form_2',
                                          'path' =&gt; drupal_get_path('module', 'reserve'),
                                          ),
}


In the template file I print some text and render the form:

    &lt;?php
    print "text";
    print drupal_render_children($variables["form"]);


The form is displayed correctly. But after I click submit button, the reserve_multi_step_form_submit is not called. Without theming it works. What can be an issue?
You have the #disabled property set on your submit element. Drupal's form API does not process the input for any element, including submit buttons, if the #disabled property is set on the server side.

If you're interested in the code behind this, the decisions are made in the _form_builder_handle_input_element() function in the includes/form.inc file of your Drupal installation.

If you want the submit button to be disabled by default for client-side purposes (i.e. you'll be enabling it through JS based on some action taken by the user) you would be better off setting the disabled attribute directly on the element, as Drupal pays no attention to this when processing the form:

$form['submit'] = array(
  '#type' =&gt; 'submit',
  '#value' =&gt; t('Submit'),
  '#attributes' =&gt; array(
    'style' =&gt; "padding: 0 10px;",
    'disabled' =&gt; 'disabled'
  )
);