Динамически добавлять поля в drupal в зависимости от выбранной опции, используя ajax/jquery

Я пытаюсь динамически создавать / добавлять текстовые поля в drupal в зависимости от выбранной опции для списка выбора.

Если выбран Jack, то создайте текстовое поле с "Jack" в качестве содержимого.

То, что я сделал до сих пор, используя свойство #ajax в Drupal, мне удалось создать текстовые поля, но я не смог получить опцию списка выбора в качестве значения поля.

$form['select_list'] = array(
    '#type' => 'select',
    '#options' => array('jack'=>'Jack', 'ben'=>'Ben'),
    '#ajax' => array(
         'callback' => 'mymodule_ajax_add',
         'wrapper' => 'select_list_fieldset',
         'method' => 'replace',
         'effect' => 'fade'
    )
);

$form['select_list_fieldset'] = array(
      '#type' => 'fieldset',
      '#prefix' => '<div id="select_list_fieldset">',
      '#suffix' => '</div>';
);

$form_state['storage']['num_people'] = isset($form_state['storage']['num_people']) ? $form_state['storage']['num_people'] : 1;

if($form_state['storage']['num_people']){
    for( $i = 1; $i < $form_state['storage']['num_people']; $i++){
        $form['select_list_fieldset'][$i]['person_name'] = array(
            '#title' => 'Name',
            '#type' => 'textfield',
            '#value' => ???????
        );
    }
}

$form_state['storage']['num_people']++;


function mymodule_ajax_add($form, &$form_state){
    return $form['select_list_fieldset'];
}

Я заставил это работать, но был разочарован тем, как заполнить поля тем, что я хочу.

Я также попытался сделать это явно, используя jQuery. Мне удалось заново создать поля, предварительно заполненные значениями в зависимости от выбранной опции из списка выбора.

$('#select_list').change(function(){
    var name_key = $(this).val();
    var name_value = $(this).text();

    $('#select_list_fieldset').append('<input type="text" value="'+name_value+'">');
});

Проблема с записью его через jQuery заключается в том, что после отправки формы все динамически созданные поля игнорируются. Я читал это где-то здесь, в stackru.

Может ли кто-нибудь помочь мне и указать правильное направление, как этого добиться? Заранее большое спасибо.

1 ответ

Получить выбранную опцию select_list:

$selected_name = isset($form_state['values']['select_list]) ? $form_state['values']['select_list'] :  NULL;

Установите значение по умолчанию для person_name:

'#default_value' =>  $selected_name,
Другие вопросы по тегам