0

我必须设计具有以下字段的表单

  1. 国家
  2. 状态

如果您选择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;
    }

以上代码仅适用于国家和州,但无法获取地区值

4

0 回答 0