Can't access value of dropdown modified by Ajax I have two dropdown fields, #2 is modified by Ajax based on #1 selection. When I try to access #2 value in the submit handler, I get an empty result. I've checked this against the docs and examples and I can't see what am I doing wrong here?

The code:

function admin_select_meeting_type_form($form, &amp;$form_state) {
  $meet_types = get_meeting_types();
  $form['meet_types']=array(
    '#type' =&gt; 'select',
    '#title' =&gt; t('Select meeting type:'),  
        '#options' =&gt; $meet_types,      
    '#required' =&gt; TRUE,
    '#ajax' =&gt; array(
      'callback' =&gt; 'ajax_select_meeting_type_callback',
      'wrapper' =&gt; 'meetlist-div',
      'effect' =&gt; 'slide',
    ),  
  );    
  $form['meet'] = array(
    '#type' =&gt; 'container',
    '#prefix' =&gt; '&lt;div id="meetlist-div"&gt;',
    '#suffix' =&gt; '&lt;/div&gt;',                      
  );
  $form['submit'] = array(
    '#type' =&gt; 'submit',                
    '#value' =&gt; t('Save')
  );              
  return $form;
}


function admin_select_meeting_type_form_submit($form, &amp;$form_state) {
    drupal_set_message('You selected:' . $form_state['values']['meet']); 
}

// Implement ajax update of meeting select field
function ajax_select_meeting_type_callback($form, $form_state) {
     if ($form['meet_types']['#value']) {
        $dispmeet = array(); // truncated for brevity, my array processing is done here
        $form['meet'] = array(
           '#type' =&gt; 'select',
           '#prefix' =&gt; '&lt;div id="meetlist-div"&gt;',
           '#suffix' =&gt; '&lt;/div&gt;',
           '#title' =&gt; t('Select meeting:'),
           '#values' =&gt; array_keys($dispmeet),
           '#options' =&gt; $dispmeet,     
           '#required' =&gt; TRUE,
        );              
        return $form['meet'];
     }
}
You shouldn't build the form element in your callback.  You want something like this:

function admin_select_meeting_type_form($form, &amp;$form_state) {
  $meet_types = drupal_map_assoc(array('conference' =&gt; 'conference', 'event' =&gt; 'event'));
  $form['meet_types']=array(
    '#type' =&gt; 'select',
    '#title' =&gt; t('Select meeting type:'),  
    '#options' =&gt; $meet_types,      
    '#required' =&gt; TRUE,
    '#ajax' =&gt; array(
      'callback' =&gt; 'ajax_select_meeting_type_callback',
      'wrapper' =&gt; 'meetlist-div',
      'effect' =&gt; 'slide',
      'method' =&gt; 'replace'
    ),  
  );    
  $form['meet_container'] = array(
    '#prefix' =&gt; '&lt;div id="meetlist-div"&gt;',
    '#suffix' =&gt; '&lt;/div&gt;',                      
  );
  if (!empty($form_state['values']['meet_types'])) {
    $form['meet_container']['meet'] = array(
      '#type' =&gt; 'select',
      '#title' =&gt; t('Select meeting:'),
      '#options' =&gt; drupal_map_assoc(array('test', 'test2')),     
      '#required' =&gt; TRUE,
    );    
  }
  $form['submit'] = array(
    '#type' =&gt; 'submit',                
    '#value' =&gt; t('Save')
  );              

  return $form;
}

function admin_select_meeting_type_form_submit($form, &amp;$form_state) {
    print_r($form_state['values']);
    die();
}

// Implement ajax update of meeting select field
function ajax_select_meeting_type_callback($form, &amp;$form_state) {
  if ($form['meet_types']['#value']) {
    return $form['meet_container'];
  }
}