Disable submit button if none selected using #states
The "#empty_option" will not give a value, which is needed for #states, a workaround is to add the default as an actual option:

$field_type_options = array( 0 =&gt; '- Select a field type -');

$form['type'] = array(
  '#type' =&gt; 'select',
  '#title' =&gt; t('Type of new field'),
  '#options' =&gt; $field_type_options,
  '#description' =&gt; t('Type of data to store.'),
  '#default_value' =&gt; isset( $form_state['values']['type'] ) ?  $form_state['values']['type'] : 0,
  '#required' =&gt; TRUE,
  );

  $form['save'] = array (
   '#type' =&gt; 'submit',
   '#value' =&gt; t ('Save field'),
   '#states' =&gt; array(
     'disabled' =&gt; array(
       ':input[name="type"]' =&gt; array('value' =&gt; 0),
      )
    )
  );


This allows #states to test the value and disable the item