Form with throbber not responding to validate or submit methods I have the following form built with Form API. Its method is GET. I try to validate or submit, but it does not work. I have checked the method names, etc., and are correct, in fact I see an "attempt" of validation in some cases. I guess that there is something weird for the way I use the select autofilling field. It is a "car models" select whose values are filled by selection of "car brand" select, and I think that the code somehow interferes with the normal use of Form API.

function mymodule_search_form(){
    $brands = get_brands();
    $brand = get_default_brand();

    $form['product'] = array(
      '#type' =&gt; 'textfield',
      '#title' =&gt; t('Product'),
      '#autocomplete_path' =&gt; 'product-busq/productos/all',
      '#attributes' =&gt; array("placeholder" =&gt; t('Product'), ) // 'class' =&gt; array('auto_submit')
     );

     $form['brand'] = array(
       '#type' =&gt; 'select',
       '#title' =&gt; t('Brand'),
       '#options' =&gt; $brands,
       '#default_value' =&gt; $brand,
       '#ajax' =&gt; array(
           'callback' =&gt; 'mymodule_models_update',
           'wrapper' =&gt; 'models_wrapper',
           'progress' =&gt; array(
           'message' =&gt; '',
           'type' =&gt; 'throbber',
          ),
         ),
        );

    $form['model'] = array(

      '#type' =&gt; "select",
      '#title' =&gt; t('Model'),
      '#required' =&gt; FALSE,
      '#multiple' =&gt; YES,
      '#attributes' =&gt; array("placeholder" =&gt; t('Model'), ), // 'class' =&gt; array('auto_submit')

       '#prefix' =&gt; '&lt;div id="models_wrapper"&gt;',
       '#suffix' =&gt; '&lt;/div&gt;',
       '#disabled' =&gt; TRUE,
      );

  $form['submit'] = array(
     '#type' =&gt; 'submit',
     '#value' =&gt; t('Submit'),
      '#name' =&gt; ""
 );

   $form["#action"] = $base_url . "/" . $language-&gt;language . "/" .   drupal_get_path_alias("node/3");
  $form["#method"] = "get";

  return $form;
} // function


And now the autofilling function which may be causing the problems, especially the last sentence. The code is copied from a tutorial somewhere:

function mymodule_models_update($form, &amp;$form_state) {
   unset($form_state['input']['model'], $form_state['values']['model']);
   $brand = $form_state['values']['brand'];
   $brand_desc = "";
   $results = db_query("SELECT description FROM {taxonomy_term_data} tax WHERE tax.tid = :tid", array(":tid" =&gt; $brand));
    foreach($results as $row) $brand_desc = $row-&gt;description;

    if($brand_desc != "") $form['model']['#options'] =      _hook_list_models($brand_desc);
    unset($form['model']["#attributes"]['disabled']);
   $form['model']['#disabled'] = FALSE;
   $form["model"]["#attributes"]["id"] = "edit-model";
   return form_builder($form['#id'], $form['model'], $form_state);
 } // function
According to the Drupal official documentation on drupal_build_form.


  method: The HTTP form method to use for finding the input for this form. May be 'post' or 'get'. Defaults to 'post'. Note that 'get' method forms do not use form ids so are always considered to be submitted, which can have unexpected effects. The 'get' method should only be used on forms that do not change data, as that is exclusively the domain of 'post.'


I would recommend you using POST method rather then GET method, so please remove the line $form["#method"] = "get";

Also, you should rewrite your ajax callback.

function hook_models_update($form, &amp;$form_state) {
   unset($form_state['input']['model'], $form_state['values']['model']);
   $brand = $form_state['values']['brand'];
   $brand_desc = "";
   $results = db_query("SELECT description FROM {taxonomy_term_data} tax WHERE tax.tid = :tid", array(":tid" =&gt; $brand));
    foreach($results as $row) $brand_desc = $row-&gt;description;

    if($brand_desc != "") $form['model']['#options'] =      _hook_list_models($brand_desc);
    unset($form['model']["#attributes"]['disabled']);
   $form['model']['#disabled'] = FALSE;
   $form["model"]["#attributes"]["id"] = "edit-model";

   $form_state['rebuild'] = TRUE;
   return $form['model'];
}


IMPORTANT NOTE:

If you can, I would suggest you rename your function or module name to avoid using hook_ prefix. It would cause unexpected function name conflict in future, because hook_ prefix is reserved for building hook API in Drupal.