Hi Tobias - The problem is the drupal_goto() in your submit function. The submit function is being processed during the AJAX callback... and the drupal_goto() takes control away from the callback.
If I'm not mistaken, this behavior will change when http://drupal.org/node/684846 lands, but for now, you'll need to not do a drupal_goto() in your submit function. -Randy On Fri, Mar 5, 2010 at 4:19 AM, Tobias Quathamer <[email protected]>wrote: > Hi all, > > I've run into a problem with D7 and AJAX-enabled forms. What I try to do > is to have a selection list use options depending on another selection > list. I've looked at the code of the AJAX examples module, but I could > not find why my code is not working. A part of my code follows, the > complete code can be found here (lines 356 onwards): > < > http://drupalcode.org/viewvc/drupal/contributions/modules/weather/weather.forms.inc?view=markup&pathrev=DRUPAL-7--1 > > > > I've separated those function calls into their own file, they are not in > the main .module file. Could this be a cause of problems? I would > appreciate any hints or pointers. > > Regards, > Tobias > > > > > function weather_location_settings_form($form, &$form_state, $display_type, > $display_number, $location_id=NULL) { > $mode = 'edit'; > // Handle the addition of a new location. > if ($location_id == 'add') { > $mode = 'add'; > $location_id = NULL; > } > // If the location exists, get the settings. If it does not exist, > // get the default location settings. > $settings = weather_get_location_settings($location_id); > $settings->places = weather_get_places($settings->country); > $form['country'] = array( > '#type' => 'select', > '#title' => t('Country'), > '#description' => t('Select a country to narrow down your search.'), > '#default_value' => $settings->country, > '#options' => drupal_map_assoc(weather_get_countries()), > '#ajax' => array( > 'callback' => 'weather_location_settings_form_callback', > 'wrapper' => 'weather_place_replace', > ), > ); > $form['place'] = array( > '#type' => 'select', > '#title' => t('Place'), > '#description' => t('Select a place in that country for the weather > display.'), > '#default_value' => $settings->icao, > '#options' => $settings->places, > '#prefix' => '<div id="weather_place_replace">', > '#suffix' => '</div>', > ); > $form['submit'] = array( > '#type' => 'submit', > '#value' => t('Save'), > ); > // Do not show the 'delete' button if not in 'edit' mode. > if ($mode == 'edit') { > $form['delete'] = array( > '#type' => 'submit', > '#value' => t('Delete'), > '#submit' => array('weather_location_delete_submit'), > ); > } > return $form; > } > > function weather_location_settings_form_callback($form, $form_state) { > return $form['place']; > } > > > -- > Tobias Quathamer | Quidquid latine dictum sit, altum viditur. > Hamburg, Germany | (Whatever is said in Latin sounds profound.) > > -- Randy Fay Drupal Development, troubleshooting, and debugging [email protected] +1 970.462.7450
