How to update one select element via Ajax when using node_add I have just created a new content type called pieza_musical. What I just want to do is update one select element via Ajax depending on another select choice, a dependant select.

I'm altering the form_node_add using hook_form_alter to inject the #ajax element and replace in the wrapper the previous select rendered by default in the content type.

Everything is working except when it comes to save. I think, due I'm replacing the select via $ajax['method'] = replace, maybe some token is missing and the content type can't be saved.

It show these error messages:


  An illegal choice has been detected. Please contact the site administrator.
  Género: illegal value.


This is my simple code:

function seven_form_pieza_musical_node_form_alter(&amp;$form, &amp;$form_state, $form_id) {
  $generos = taxonomy_get_tree(2,0,1);
  $values_generos = array();
  foreach ($generos as $genero) {
    $values_generos[$genero-&gt;tid] = $genero-&gt;name;
  }

  $form['field_genero']['und']['#options'] = $values_generos;
  // adds ajax 
  $form['field_genero']['und']['#ajax'] =  array(
     'event' =&gt; 'change',
     'wrapper' =&gt; 'edit-field-subgenero-und',
     'callback' =&gt; 'subgenero_ajax_callback',
  );
}

function subgenero_ajax_callback($form, &amp;$form_state) {
  $generoId = $form_state['values']['field_genero']['und'][0]['value'];

  $cat = taxonomy_term_load($generoId);
  $vid = $cat-&gt;vid;

  $generos = taxonomy_get_tree($vid,$generoId,1);

  $options = array();
  foreach ($generos as $genero) {
    $options[$genero-&gt;tid] = $genero-&gt;name;
  }
  $form['field_subgenero_ajax'] = array(
    '#type' =&gt; 'select',
    '#id' =&gt; 'edit-field-subgenero-und',
    '#required' =&gt; TRUE,
    '#name' =&gt; 'field_subgenero[und]',
    '#options' =&gt; $options,
  );
  return $form['field_subgenero_ajax'];
}



Is it possible to make this is a content type?
Should I create a new entity just for this little purpose?
Should I create a custom field?
Since you're dealing with fields created in by Drupal admin, You may want to check the option values you replaced in the fields that it matches in the field settings.

[EDITED]

Try the Hierarchical Select module. In the page, it also supports Taxonomies.