1

我有一个包含多个部分的表格。每个部分都有一个“#states”属性,根据上一步中选择的内容,它可以显示或隐藏。每个部分中都有一个用于添加或删除字段的按钮。单击其中一个按钮通过 AJAX 调用一个函数。此函数使用 $form_state['triggering_element']['#name'] 来找出单击了哪个按钮,从而将字段添加到适当的部分。问题是无论哪个部分可见,triggering_element 似乎总是第一部分中的按钮。我不想把所有的代码都放在这里,因为它很长。以下是几个按钮的外观以及单击它调用的函数和最终回调:

$form['survey']['contents']['addsurvey'] = array(
    '#type' => 'submit',
    '#default_value' => t('Add Another Survey Question'),
    '#submit' => array('touchpoints_metrics_add_one'),
    '#limit_validation_errors' => array(),
    '#name' => 'add-survey',
    '#ajax' => array(
        'callback' => 'touchpoints_metrics_callback',
        'wrapper' => 'survey-div',
    ),
);

$form['mysteryshop']['contents']['addmystery'] = array(
        '#type' => 'submit',
        '#default_value' => t('Add Another Observation'),
        '#submit' => array('touchpoints_metrics_add_one'),
        '#limit_validation_errors' => array(),
        '#name' => 'add-mystery',
        '#ajax' => array(
            'callback' => 'touchpoints_metrics_callback',
            'wrapper' => 'mysteryshop-div',
        ),
    );

function touchpoints_metrics_add_one($form, &$form_state) {
    $element = $form_state['triggering_element']['#name'];
    $tracker = '';
    if (strpos($element, 'survey')) {
        $tracker = 'num_surveys';
    } elseif (strpos($element, 'mystery')) {
        $tracker = 'num_mystery';
    } elseif (strpos($element, 'budget')) {
        $tracker = 'num_budget';
    } elseif (strpos($element, 'incdec')) {
        $tracker = 'num_incdec';
    } elseif (strpos($element, 'roi')) {
        $tracker = 'num_roi';
    } elseif (strpos($element, 'epu')) {
        $tracker = 'num_epu';
    } elseif (strpos($element, 'response')) {
        $tracker = 'num_response';
    } elseif (strpos($element, 'numcomplete')) {
        $tracker = 'num_numcomplete';
    } elseif (strpos($element, 'perccap')) {
        $tracker = 'num_perccap';
    }
    $form_state[$tracker]++;
    $form_state['rebuild'] = TRUE;
 }

function touchpoints_metrics_callback($form, &$form_state) {
    $element = $form_state['triggering_element']['#name'];
    $tracker = '';
    if (strpos($element, 'survey')) {
        $tracker = 'survey';
    } elseif (strpos($element, 'mystery')) {
        $tracker = 'mysteryshop';
    } elseif (strpos($element, 'budget')) {
        $tracker = 'budget';
    } elseif (strpos($element, 'incdec')) {
        $tracker = 'incdec';
    } elseif (strpos($element, 'roi')) {
        $tracker = 'roi';
    } elseif (strpos($element, 'epu')) {
        $tracker = 'epu';
    } elseif (strpos($element, 'response')) {
        $tracker = 'response';
    } elseif (strpos($element, 'numcomplete')) {
        $tracker = 'numcomplete';
    } elseif (strpos($element, 'perccap')) {
        $tracker = 'perccap';
    }
    return $form[$tracker]['contents'];

}
4

0 回答 0