Dynamic select list in the form (dependent dropdown) I'm using Drupal seven. I want to make the options in a select list be dependent on the value chosen in another select list in a form.  I'm sure this has been asked many times before, but I am having difficulty finding a clear answer for how to do this.

The form is for users to enter a work history.  They need to select a squadron which is a node reference to the squadron field type, and this is in a drop-down list.  However, the squadron, is dependent upon a city drop-down list.  Users first need to select a city which will then filter the options for the squadron.  In the squadron content type, I created a taxonomy for city which gets tagged to the squadron.

I would be very grateful for any pointers as to the best way (simplest?) to go about this, or for any useful resources online which would help.
You can use Ajax to accomplish this. Drupal 7 has good Ajax support now. On your first select list (city) you'll need to add Ajax information. Then, the second select list can be populated based on the information in the first. You can also even hide the second select list until an option in the first is selected, and I'll explain how to do that in a bit.
First, to set up the basic form:

$form['city'] = array(
  '#type' =&gt; 'select',
  '#title' =&gt; t('City'),
  '#options' =&gt; $options,
  '#ajax' =&gt; array(
    'event' =&gt; 'change',
    'wrapper' =&gt; 'squadron-wrapper',
    'callback' =&gt; 'mymodule_ajax_callback',
    'method' =&gt; 'replace',
  ),
);
$form['squadron_wrapper'] = array('#prefix' =&gt; '&lt;div class="squadron-wrapper"&gt;', '#suffix' =&gt; '&lt;/div&gt;');
$form['squadron_wrapper']['squadron'] = array(
  '#type' =&gt; 'select',
  '#title' =&gt; t('Squadron'),
  '#options' =&gt; $squadron_options,
);


This is just the basic setup of the elements. Now you'll need a way to determine what options should go in squadron. First you need to make your Ajax callback identified in 'city' select list. In most cases you can just return the element that wraps the ajax element, in this case $form.

function mymodule_ajax_callback($form, $form_state) {
  return $form;
}


Now, when the 'city' select list changes it will rebuild the squadron-wrapper part of the form. Your 'city' value will now be in $form_state['values']. So, when the form is rebuilt we need to determine what options to give to the select list based on the value of 'city'.

// Get the value of the 'city' field.
$city = isset($form_state['values']['city']) ? $form_state['values']['city'] : 'default';
switch ($city) {
  case 'default':
    // Set default options.
    break;
  case 'losangeles':
    // Set up $squadron_options for los angeles.
    break;
}

// If you want to hide the squadron select list until a city is
// selected then you can do another conditional.
if ($city !== 'default') {
  $form['squadron_wrapper']['squadron'] = array(
    '#type' =&gt; 'select',
    '#title' =&gt; t('Squadron'),
    '#options' =&gt; $squadron_options,
  );
}