ahah: mehrere Form-Elemente bei Select-change ändern
am 07.05.2009 - 12:39 Uhr in
Hallo Leute!
Ich habe hier ein Registrierungs-Formular in einem eigenen Modul "custom" mit 4 Selects, die von einander abhängig sind:
Firma -> Land -> Stadt -> Adresse
Wenn ich eine Firma auswähle, wird per ahah das Land-Select gefüllt. Wenn ich dann ein Land auswähle, erhält das Stadt-Select entsprechende Einträge etc.
Mein Problem nun: Habe ich alle 4 gewählt und wähle dann eine andere Firma, müssen Stadt und Adresse geleert werden bzw. mit "---" gefüllt (Land wird ja schon durch ahah gefüllt). Bei Auswahl eines Landes muss entsprechend das Adress-Select geleert werden.
Wie setzte ich das nun in meiner Funktion um? Habe schon diverse Ansätze versucht, nichts klappt. Hier die Funktion, die nach der Firmenwahl das Land-Select füllt:
<?php
function custom_registration_get_company_countries_js()
{
// Get the new values
$new_company_countries = custom_registration_get_company_countries($_POST['company']);
// Get form from cache and store modified place selection
$form_state = array('storage' => NULL, 'rebuild' => TRUE);
$form = form_get_cache($_POST['form_build_id'], $form_state);
// Select neu setzen
$form['account']['country'] = array(
'#type' => 'select',
'#title' => t('Country'),
'#required' => TRUE,
'#options' => $new_company_countries,
'#description' => t('Helptext for the agencies country select'),
'#weight' => 11,
);
form_set_cache($_POST['form_build_id'], $form, $form_state);
$form += array(
'#post' => $_POST,
'#programmed' => FALSE,
);
// Rebuild the form.
$form_state = array('submitted' => FALSE);
$form = form_builder('user-register', $form, $form_state);
// Render the new output.
$output = theme('status_messages') . drupal_render($form['account']['country']);
// Don't call drupal_json(). ahah.js uses an iframe and
// the header output by drupal_json() causes problems in some browsers.
print drupal_to_js(array('status' => TRUE, 'data' => $output));
exit;
}
?>
Hier müsste also irgendwie sowas rein:
<?php
$form['account']['city']['#options'] = array('0' => '---');
$form['account']['agencies_addresses']['#options'] = array('0' => '---');
?>
Ich habe auch schon versucht, das Element einfach anzuhängen. Das geht zwar, aber dann ist die Select-Box (logischereise) zweimal vorhanden, weil sie jetzt in einem anderen Wrapper gerendert wird.
<?php
function custom_registration_get_company_countries_js()
{
$new_company_countries = custom_registration_get_company_countries($_POST['company']);
// Get form from cache and store modified place selection
$form_state = array('storage' => NULL, 'rebuild' => TRUE);
$form = form_get_cache($_POST['form_build_id'], $form_state);
// Select neu setzen
$form['account']['country'] = array(
'#type' => 'select',
'#title' => t('Country'),
'#required' => TRUE,
'#options' => $new_company_countries,
'#description' => t('Helptext for the agencies country select'),
'#weight' => 11,
);
$form['account']['city'] = array(
'#type' => 'select',
'#title' => t('City'),
'#required' => TRUE,
'#options' => array('0' => '---'),
'#description' => t('Helptext for the agencies city select'),
'#weight' => 12,
);
form_set_cache($_POST['form_build_id'], $form, $form_state);
$form += array(
'#post' => $_POST,
'#programmed' => FALSE,
);
// Rebuild the form.
$form_state = array('submitted' => FALSE);
$form = form_builder('user-register', $form, $form_state);
// Render the new output.
$output = theme('status_messages') . drupal_render($form['account']['country']) . drupal_render($form['account']['city']);
// Don't call drupal_json(). ahah.js uses an iframe and
// the header output by drupal_json() causes problems in some browsers.
print drupal_to_js(array('status' => TRUE, 'data' => $output));
exit;
}
?>
Kann mir jemand helfen?
Grüße Jens
- Anmelden oder Registrieren um Kommentare zu schreiben
Neue Kommentare
vor 19 Stunden 20 Minuten
vor 1 Tag 2 Stunden
vor 1 Tag 12 Stunden
vor 1 Tag 12 Stunden
vor 1 Tag 12 Stunden
vor 1 Tag 13 Stunden
vor 1 Tag 13 Stunden
vor 1 Tag 14 Stunden
vor 1 Tag 16 Stunden
vor 1 Tag 16 Stunden