Форма ajax добавить больше кнопка добавлена с помощью другого обратного вызова ajax не работает
У меня есть кнопка формы, в которую я хочу добавить другое поле с другой кнопкой в этой форме (я могу это сделать), но вторая кнопка недоступна. Любая идея. Ниже приведен мой код -
Это мой код формы -
function create_report_form($form, $form_state) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => t('Report ttitle'),
'#value' =>'',
);
$form['actions'] = array(
'#type' => 'actions',
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
$form['conditions'] = array(
'#tree' => TRUE,
);
$form['conditions']['report_type'] = array(
'#title' => t('Report type'),
'#type' => 'select',
'#prefix'=> '<div class="conditions-wrapper"></div>',
'#multiple' => false,
'#options' => get_report_type()
);
$form['conditions']['submit'] = array(
'#type' => 'button',
'#value' => t('Add condition'),
//'#name' => '_add_another_outcome',
'#ajax' => array(
'callback' => 'reports_add_conditions',
'wrapper' => 'report-form',
'method' => 'replace',
'effect' => 'fade',
),
);
return $form;
}
Теперь, когда я нажму на эту кнопку, она вызовет следующую функцию и создаст другой элемент формы (список выбора) с помощью другой кнопки, которая вызовет другую функцию ajax (это то, что не работает).
function reports_add_conditions($form, &$form_state){
$values = $form_state['values'];
$form_state['rebuild'] = TRUE;
$type = $values['conditions']['report_type'];
$form['attributes'] = array(
'#tree' => TRUE,
);
$form['attributes']['submit'] = array(
'#type' => 'button',
'#value' => t('Add attribute condition'),
'#ajax' => array(
'callback' => 'reports_add_attribute_conditions',
'wrapper' => 'report-form',
'method' => 'replace',
'effect' => 'fade',
),
);
$form['attributes']['attribute'] = array(
'#type' => 'select',
'#title' => '',
'#options' => get_options($type),
'#size' => 22,
);
return drupal_render($form);
}
Как вы из кода видно, что я не могу вызвать функцию "reports_add_attribute_conditions" для кнопки.
Это мой второй код обратного звонка -
function reports_add_attribute_conditions($form, &$form_state){
$form_state['rebuild'] = TRUE;
$values = $form_state['values'];
$type = $values['conditions']['report_type'];
$form['attribute'] = array(
'#type' => 'select',
'#name' => $type,
'#title' => '',
'#options' => get_options($type),
'#size' => 22,
);
$form['attributes']['submit'] = array(
'#type' => 'button',
'#value' => t('Add attribute condition'),
'#ajax' => array(
'callback' => 'reports_add_attribute_conditions',
'wrapper' => 'report-form',
'method' => 'replace',
'effect' => 'fade',
),
);
return drupal_render($form);
}
Любая идея очень заметна
1
Author: Nabajit Roy, 2016-06-28
2 answers
@Nabajitroy моя идея
- Никогда не используйте
drupal_render()
вызовы вручную (возвращайте массив $form как есть) - Переместить весь код генерации формы в конструктор форм(
create_report_form()
), AJAX обратный вызов не должен создавать новые элементы для формы, а толькоcreate_report_form()
следует - Обратные вызовы AJAX должны возвращать только форму элемента (не генерировать их)
, например, возвращать
$form['attributes']['submit']
и могут быть$form_state['rebuild'] = true;
при необходимости. - Чтобы узнать в
create_report_form()
, была ли она вызвана кнопкой запроса AJAX, проверьте$form_state['triggering_element']
в ней. - Я почувствуйте, что использование
'#type' => 'submit'
вместо'#type' => 'button'
лучше
1
Author: Mykola Mykolayovich Dolynskyi, 2016-07-04 17:48:32
Может ли AJAX-запрос вообще не отправляться на сервер? Попробуйте изменить
$form['attributes']['submit'] = array(
'#type' => 'button',
К $form['attributes']['submit'] = array(
'#type' => 'submit',
0
Author: Mykola Mykolayovich Dolynskyi, 2016-07-04 16:56:57