Mehrer AJAX Buttons auf einer Formularseite
Eingetragen von conscienc3 (1)
am 11.07.2011 - 22:14 Uhr in
am 11.07.2011 - 22:14 Uhr in
Hi,
ich stehe vor einem AJAX Problem.
Ich habe zwei Fieldsets in meinem Formular. Jedes Fieldset hat einen Hinzufuegen- und Entfernenbutton ... damit moechte ich via AJAX dynamisch in das 1. Fieldset Textfelder und ins zweite ebenfalls Textfelder einfuegen, jedoch unterschiedlicher Art ... leider functioniert folgendes Codesnippet nicht:
<?php
function telquel_protocol_form($form, &$form_state) {
// Because we have many fields with the same values, we have to set
// #tree to be able to access them.
$form['#tree'] = TRUE;
$form['names_fieldset'] = array(
'#type' => 'fieldset',
'#title' => t('Plenumsteilnehmer'),
// Set up the wrapper so that AJAX will be able to replace the fieldset.
'#prefix' => '<div id="names-fieldset-wrapper">',
'#suffix' => '</div>',
);
// Build the fieldset with the proper number of names. We'll use
// $form_state['num_names'] to determine the number of textfields to build.
if (empty($form_state['num_names'])) {
$form_state['num_names'] = 3;
}
for ($i = 0; $i < $form_state['num_names']; $i++) {
if ($i < 3) {
$form['names_fieldset']['name'][$i] = array(
'#title' => t('@num. Teilnehmer', array('@num' => ($i + 1))),
'#type' => 'textfield',
'#required' => TRUE,
);
}
else {
$form['names_fieldset']['name'][$i] = array(
'#title' => t('@num. Teilnehmer', array('@num' => ($i + 1))),
'#type' => 'textfield',
);
}
}
$form['names_fieldset']['add_name'] = array(
'#type' => 'submit',
'#value' => t('Hinzufuegen'),
'#submit' => array('protocol_add_one_name'),
// See the examples in ajax_example.module for more details on the
// properties of #ajax.
'#ajax' => array(
'callback' => 'protocol_names_ajax_callback',
'wrapper' => 'names-fieldset-wrapper',
'name' => 'name',
),
);
if ($form_state['num_names'] > 1) {
$form['names_fieldset']['remove_name'] = array(
'#type' => 'submit',
'#value' => t('Entfernen'),
'#submit' => array('protocol_remove_one_name'),
'#ajax' => array(
'callback' => 'protocol_names_ajax_callback',
'wrapper' => 'names-fieldset-wrapper',
'name' => 'name',
),
);
}
// Topic-Fieldset definition
$form['topic_fieldset'] = array(
'#title' => t('Themen'),
'#type' => 'fieldset',
'#description' => t('Eine Liste der Themen des Plenums'),
'#prefix' => '<div id="topics-fieldset-wrapper">',
'#suffix' => '</div>',
);
if (empty($form_state['num_topics'])) {
$form_state['num_topics'] = 1;
}
for ($n = 0; $n < $form_state['num_topics']; $n++) {
$form['topic_fieldset']['topic'][$n] = array(
'#title' => t('@num. Thema', array('@num' => ($n + 1))),
'#type' => 'textfield',
);
}
$form['topic_fieldset']['add_topic'] = array(
'#type' => 'submit',
'#value' => t('Hinzufuegen'),
'#submit' => array('protocol_add_topic'),
'#ajax' => array(
'callback' => 'protocol_topics_ajax_callback',
'wrapper' => 'topics-fieldset-wrapper',
'name' => 'topic',
),
);
if ($form_state['num_topics'] > 1) {
$form['topic_fieldset']['remove_topic'] = array(
'#type' => 'submit',
'#value' => t('Entfernen'),
'#submit' => array('protocol_remove_topic'),
'#ajax' => array(
'callback' => 'protocol_topics_ajax_callback',
'wrapper' => 'topics-fieldset-wrapper',
'name' => 'topic',
),
);
}
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Abschicken'),
);
return $form;
}
function protocol_topics_ajax_callback($form, $form_state) {
return $form['topics_fieldset'];
}
function protocol_remove_topic($form, &$form_state) {
if ($form_state['num_topics'] > 1) {
$form_state['num_topics']--;
}
$form_state['rebuild'] = TRUE;
}
function protocol_add_topic($form, &$form_state) {
firep('add topic');
$form_state['num_topics']++;
$form_state['rebuild'] = TRUE;
}
function protocol_names_ajax_callback($form, $form_state) {
return $form['names_fieldset'];
}
function protocol_add_one_name($form, &$form_state) {
firep('add name');
$form_state['num_names']++;
$form_state['rebuild'] = TRUE;
}
function protocol_remove_one_name($form, &$form_state) {
firep('remove name');
if ($form_state['num_names'] > 1) {
$form_state['num_names']--;
}
$form_state['rebuild'] = TRUE;
}
?>
Mach ich das ganze mit nur einem Fieldset und einem Buttonpaar funktioniert alles. Was laeuft da schief ? Ich komm mit meiner suche im Internet irgendwie nicht weiter.
Ich danke euch fuer eure Hilfe.
- Anmelden oder Registrieren um Kommentare zu schreiben
Neue Kommentare
vor 3 Stunden 12 Minuten
vor 3 Tagen 23 Stunden
vor 4 Tagen 7 Stunden
vor 4 Tagen 11 Stunden
vor 4 Tagen 16 Stunden
vor 1 Woche 1 Tag
vor 1 Woche 1 Tag
vor 1 Woche 1 Tag
vor 2 Wochen 4 Tagen
vor 3 Wochen 5 Tagen