Note that the linked issue is marked critical (so it will be fixed before D7 is released) and already has a patch. Rather than change your form, first try applying the patch and see if that fixes it for you.

- Ken Winters

On Mar 5, 2010, at 10:33 AM, Randy Fay wrote:

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


Reply via email to