Как определить, какой элемент вызвал (запустил) функцию обратного вызова AJAX?


Например:

/** FIRST FIELDSET **/

$form['fieldset_1']['enabled'] = array(
  '#type'        => 'radios',
  '#options'     => array(1 => t('Enable'),
                          0 => t('Desable'),
                          ),
  '#ajax'    => array('callback' => 'my_ajax_callback',
                      'wrapper'  => 'my_wrapper_1',
                     ),
);

$form['fieldset_1']['myChangebleField'] = array(
  '#type'   => 'whatever',
  '#prefix' => '<div id="my_wrapper_1">',
  '#suffix' => '</div>',
);

/** SECOND FIELDSET **/

$form['fieldset_2']['enabled'] = array(
  '#type'        => 'radios',
  '#options'     => array(1 => t('Enable'),
                          0 => t('Desable'),
                          ),
  // Now I am calling the same callback function but assigning a different wrapper
  '#ajax'    => array('callback' => 'my_ajax_callback',
                      'wrapper'  => 'my_wrapper_2',
                     ),
);

$form['fieldset_2']['myChangebleField'] = array(
  '#type'   => 'whatever',
  '#prefix' => '<div id="my_wrapper_2">',
  '#suffix' => '</div>',
);

function my_ajax_callback($form, $form_state) {

/**  
 *  How do I figure out which of the element "enabled" was the caller? 
 *
 *  In that way I could do something like:
 **/
   switch($caller){
     case 'fieldset_1':
       // do stuff...
       break;
     case 'fieldset_2':
       // do stuff...
       break;
     // ...
   }

   return $form[$fieldset]['myChangebleField']
}

Как видно из приведенного выше примера, как мне определить, какой из элементов "включен" был вызывающим?

Наличие двух функций обратного вызова не является опцией, так как элементы формы будут построены динамическим способом, и я фактически не буду использовать оператор switch в функции обратного вызова, как показано в примере.

Приветствия,

Author: Mołot, 2011-08-21

1 answers

Понял!!! Этот парень здесь $form_state['triggering_element'] делает трюк.

 7
Author: Francisco Luz, 2012-03-04 02:49:08