【问题标题】:Drupal 7 - change textfield values depending on select valueDrupal 7 - 根据选择值更改文本字段值
【发布时间】:2018-04-01 14:05:19
【问题描述】:

我在一个页面上有两个 drupal 表单,但我不明白 ajax 回调如何根据第一个表单的值更改一个表单的值。

我的表格:

function my_form($form, &$form_state) {

    $form['first_form'] = [
        '#title' => t('Choose:') ,
        '#type' => 'select',
        '#options' => [
            '1' => 'First',
            '2' => 'Second',
            '3' => 'Third',
        ],
        '#required' => '1',
        '#ajax' => [
            'method' => 'replace',
            'callback' => 'my_form_state_ajax_callback',
        ],
    ];

    //---------------------

    $form['second_form'] = [
        '#type' => 'fieldset',
        '#title' => "Second form",
    ];

    $form['second_form']['name'] = [
        '#type' => 'textfield',
        '#required' => TRUE,
        '#title' => 'Name.',
    ];

    $form['second_form']['submit'] = [
        '#type' => 'submit',
        '#value' => "Go",
        '#submit' => ['my_form_submit'],
    ];
}

回调函数:

function my_form_state_ajax_callback($form, &$form_state) {

    switch ($form_state['values']['id']) {
        case 1:
            $form['second_form']['name']['#value'] = 'One';
            break;
        case 2:
            $form['second_form']['name']['#value'] = 'Two';
            break;
        case 3:
            $form['second_form']['name']['#value'] = 'Three';
            break;
    }

    return $form['edit_medal'];
}

基本上,如果我在选择下拉列表中选择First,我想将第二个表单的name 字段更改为One 等。如果我没有在选择下拉列表中选择任何内容,则第二个表单的值不会设置字段。

上面的代码虽然不起作用。我做错了什么?

【问题讨论】:

  • 是否可以将两种形式合二为一?只是问问。 (我不希望您尝试的内容会跨表单起作用。)

标签: forms drupal


【解决方案1】:

在这个 first_form 中你必须添加 'wrapper''prefix', 'suffix'

     function my_form($form, &$form_state) {

            $form['first_form'] = [
                '#title' => t('Choose:') ,
                '#type' => 'select',
                '#options' => [
                    '1' => 'First',
                    '2' => 'Second',
                    '3' => 'Third',
                ],
                '#required' => '1',
                '#ajax' => [
                    'method' => 'replace',
                    'callback' => 'my_form_state_ajax_callback',
                    'wrapper' => 'checkboxes-div'
                ],
            ];
            $form['second_form']['name'] = [
                 '#type' => 'textfield',
                 '#required' => TRUE,
                 '#title' => 'Name.',
                 '#prefix' => '<div id="checkboxes-div">',
                 '#suffix' => '</div>',
            ];
    }

在回调函数中,您必须返回要更新的字段,例如 $form['second_form']['name']

function my_form_state_ajax_callback($form, &$form_state) {

    switch ($form_state['values']['first_form']) {
        case 1:
            $form['second_form']['name']['#value'] = 'One';
            break;
        case 2:
            $form['second_form']['name']['#value'] = 'Two';
            break;
        case 3:
            $form['second_form']['name']['#value'] = 'Three';
            break;
    }

    return $form['second_form']['name'];
}

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多