1

I am building a form with form API in a custom module. Certain fields should be populated based on the selected value of a dropdown.

User will select the pre-entered profiles, based on which other fields should be populated.

I have used ajax callback on select box, it works fine for the first time. But not working on next time.

function multi_step_user_info_form($form, &$form_state) {
$form['user_data_form']['reference_number_ajax'] = array(
'#type' => 'select',
'#title' => 'Select a Patient', 
'#ajax' => array(
        'callback' => 'ref_number_dropdown_callback',
        'wrapper' => 'ref_number_list',
        'event' => 'change',
        'method' => 'replace',
        'effect' => 'fade',
        ),  
'#attributes' => array('class'=>array('dynamic-select')),
'#default_value' => isset($values['reference_number_ajax']) ? $values['reference_number_ajax'] : NULL,  
'#prefix'=>'<div class="col-md-12">', 
'#field_suffix'=>'</div>');  

$form['user_data_form']['patient_name'] = array('#type' => 'textfield',
'#title' => 'Patient Name','#value' => $patient_name, '#default_value' => isset($values['patient_name']) ? $values['patient_name'] : NULL, 
'#prefix'=>'<div id="ref_number_list"><div class="col-md-12">',
'#field_suffix'=>'' 
 ); return $form; } 

function ref_number_dropdown_callback($form, $form_state) {     
    $query = new EntityFieldQuery();
    $query->entityCondition('entity_type', 'node')
      ->entityCondition('bundle', 'query')
      ->propertyCondition('status', NODE_PUBLISHED)
      ->fieldCondition('field_reference_number', 'value', $form_state['values']['reference_number_ajax'], '=')
      ->range(0, 1);
    $result = $query->execute();
    $nid ='';
    if (isset($result['node'])) {
       $nid = $nid = current($result['node'])->nid;
       $node = node_load($nid);
    }
  //  $form_state['rebuild'] = TRUE;
  // THESE TWO VALUES SHOULD BE POPULATED ON AJAX CALLBACK //
    $form['user_data_form']['patient_name']['#value'] = $node->field_patientname[$node->language][0]['value'];
    $form['user_data_form']['age']['#value']          = $node->field_age[$node->language][0]['value'];
    $elements = array($form['user_data_form']['patient_name'],$form['user_data_form']['age']);
    return $elements;
  }
0

You are using wrong notation for form elements, instead of field_suffix you should use "suffix" tag, as drupal is not able to track your closing tag, for a form element.

function demo_pane_form($form, &$form_state) {

 $options= array(1=>1, 2=>2, 3=>3, 4=>4, 5=>5);

 $form['user_data_form']['reference_number_ajax'] = array(   
  '#type' =>'select', 
  '#title' => 'Select a Patient',
  '#ajax' => array(
     'callback' => 'demo_pane_dropdown_callback',
     'wrapper' => 'ref_number_list',
     'event' => 'change',
     'method' => 'replace',
     'effect' => 'fade',
   ),   
   '#attributes' => array(
     'class'=>array('dynamic-select')
   ),  
   '#default_value' => 1,  
   '#options' => $options,   
   '#prefix'=>'<div class="col-md-12">',  
   '#suffix'=>'</div>' 
 );

 $form['user_data_form']['patient_name'] = array(   
  '#type' => 'textfield',
  '#title' => 'Patient Name', 
  '#value' => 1,  
  '#prefix'=>'<div id="ref_number_list"><div class="col-md-12">',  
  '#suffix'=>'</div></div>',
 );

 return $form;

 }

 function demo_pane_dropdown_callback($form, $form_state) {

   $form['user_data_form']['patient_name']['#value'] =
   $form_state['values']['reference_number_ajax'];  
   $form['user_data_form']['age']['#value']          =
   $form_state['values']['reference_number_ajax'];      
   $elements =  array(
     $form['user_data_form']['patient_name'],
     $form['user_data_form']['age'],
   );

  return $elements; 
 }
|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.