0

I have to design the form with following fields

  1. Country
  2. State
  3. District

If you select Country the Country value will be loaded in the Country Dropdown Field Then if you select State the States belongs to Countries value will be loaded in the State Dropdown. After that If you select District the Districts value belongs to States will be loaded in the District Dropdown field.

I have tried but not work properly

 $form['Country'] = [
    '#type' => 'select',
    '#title' => t('Country'),
    '#description' => t('Country'),
    '#required' => TRUE,
    '#options' => $countries,
    // '#default_value' => setInConfigandGEtVAlue,
    '#ajax' => ['callback' => [$this, 'getStates'], 'event' => 'change',
    'method' => 'html',
    'wrapper' => 'states-to-update',
    'progress' => [
    'type' => 'throbber',
    'message' => NULL,
    ],
    ],
    ];
    
    $states = [];
    // if($default_country != "") { load default states of selected country by get the default va
    lue of country (setInConfigandGEtVAlue)
    // $states = $this->getStatesByCountry($default_country);
    // }
    $form['state'] = array(
    '#title' => t('State'),
    '#type' => 'select',
    '#description' => t('Select the state'),
    '#options' => $states,
    // '#default_value' => setInConfigandGEtVAlue,
    '#attributes' => ["id" => 'states-to-update'],
    '#multiple' => TRUE,
    '#validated' => TRUE
    );
    

$district_opt_records = [];


$form['districts'] = array(
'#type' => 'select',
'#title' => t('District Name'),
'#options' => $district_opt_records,
'#required' => TRUE,
'#attributes' => ["id" => 'district-to-update'],
'#validated' => TRUE,);

 
    public function getStates(array &$element, FormStateInterface $form_state) {
    $triggeringElement = $form_state->getTriggeringElement();
    $value = $triggeringElement['#value'];
    $states = $this->getStatesByCountry($value);
    $wrapper_id = $triggeringElement["#ajax"]["wrapper"];
    $renderedField = '';
    foreach ($states as $key => $value) {
    $renderedField .= "<option value='".$key."'>".$value."</option>";
    }
    $response = new AjaxResponse();
    $response->addCommand(new HtmlCommand("#".$wrapper_id, $renderedField));
    return $response;
    }
    public function getStatesByCountry($default_country) {
    //add you logic return states by country
    return $states;
    }

The above code working only Countries and State but not able to get District values

0 Answers0