I have to design the form with following fields
- Country
- State
- 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