양식 API '#ajax'
속성 을 사용하는 양식 을 작성 $form_state
중이며 AJAX 사용 가능 단추를 누르면 변경해야합니다 . 내가 가진 것은 다음과 같습니다.
양식 작성기 함수 내부 :
...
$form['some_fieldset']['add_more'] = array(
'#type' => 'button',
'#value' => t('Add more rows'),
'#ajax' => array(
'wrapper' => 'some-fieldset',
'callback' => 'my_module_settings_ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
...
콜백 함수는 다음과 같습니다.
function my_module_settings_ajax($form, $form_state) {
// Make a change to $form_state
if ($form_state['some_fieldset']['add_more']) {
$form_state['values']['some_fieldset']['table'][] = array('first_field' => '',
'second_field' => '');
}
return $form['some_fieldset'];
}
$form_state
콜백이 끝나면 변경 한 내용이 손실 된 것 같습니다. $form_state
이 기능을 변경하는 방법이 있습니까 , 아니면 대신이 기능을 사용해야하는 다른 기능이 있습니까?
편집하다
결과적으로 콜백은이 논리를 수행하기에 잘못된 장소입니다. 대신 폼 빌더 함수의 맨 위에 다음을 추가했습니다.
// Respond to AJAX-triggger:
// Add new row
if ($form_state['triggering_element']['#name'] == 'add_more') {
$form_state['values']['some_fieldset']['table'][] = array('first_field' => '',
'second_field' => '');
}
물론 버튼 이름을 지정해야했습니다.
$form['some_fieldset']['add_more'] = array(
'#type' => 'button',
'#name' => 'add_more', // <-- Right here
'#value' => t('Add more rows'),
'#ajax' => array(
'wrapper' => 'some-fieldset',
'callback' => 'my_module_settings_ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
그리고 지금 작동합니다!