根据所选选项使用ajax / jquery在drupal中动态添加字段

时间:2017-07-03 15:08:57

标签: jquery drupal drupal-7 drupal-forms ajax-forms

我尝试在drupal中动态创建/添加文本字段,具体取决于所选的列表选项。

如果选择了Jack,则使用" Jack"创建文本字段。作为内容。

到目前为止,我使用Drupal的#ajax属性做了什么,我设法创建了文本字段,但无法将选择列表选项作为字段值。

$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编写它的问题是,一旦提交表单,所有动态创建的字段都将被忽略。我在stackoverflow中的某处读到了它。

任何人都可以帮助我,并指出我如何实现这一目标的正确方向?非常感谢。

1 个答案:

答案 0 :(得分:0)

获取select_list的选择选项:

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

设置person_name的默认值:

'#default_value' =>  $selected_name,