我必须设计具有以下字段的表单
- 国家
- 状态
- 区
如果您选择Country,则 Country 值将加载到 Country Dropdown 字段中然后,如果您选择State,则州属于 Country 值将加载到 State 下拉列表中。之后,如果您选择地区,则属于州的地区值将加载到地区下拉字段中。
我试过但不能正常工作
$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;
}
以上代码仅适用于国家和州,但无法获取地区值