Score:-1

เหตุใดฉันจึงได้รับ "ระบุการเลือกที่ไม่ถูกต้อง" จากแบบฟอร์มที่รหัสของฉันสร้างขึ้น?

ธง ng

ฉันใช้รหัสต่อไปนี้สำหรับแบบฟอร์ม

ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
  $region_options = คงที่::getFirstDropdownOptions();
  $แบบฟอร์ม['vvv_region'] = [
    '#type' => 'เลือก',
    '#title' => $this->t('ช่องเลือกภูมิภาค'),
    '#options' => $region_options,
    '#empty_option' => t('- เลือกภูมิภาค -'),
    '#อาแจ็กซ์' => [
      'callback' => '::myAjaxCallback',
      'disable-refocus' => FALSE,
      'เหตุการณ์' => 'เปลี่ยนแปลง',
      'wrapper' => 'แก้ไขเอาต์พุต',
      'ความคืบหน้า' => [
        'type' => 'throbber',
        'message' => $this->t('กำลังตรวจสอบรายการ...'),
      ]
    ]
  ];
    
  $region_selected = $form_state->getValue('vvv_region');
  $city_options = static::getSecondDropdownOptions($region_selected);
    
  $form['เอาท์พุท'] = [
    '#type' => 'เลือก',
    '#title' => $this->t('ฟิลด์เลือกเมือง'),
    '#options' => $city_options,     
    '#prefix' => '<div id="edit-output">',
    '#suffix' => '</div>',
    '#empty_option' => t('- เลือกเมือง -'),
    '#default_value' => '',
    '#อาแจ็กซ์' => [
      'callback' => '::cityAjaxCallback',
      'disable-refocus' => FALSE,
      'เหตุการณ์' => 'เปลี่ยนแปลง',
      'wrapper' => 'แก้ไขเมือง',
      'ความคืบหน้า' => [
        'type' => 'throbber',
        'message' => $this->t('กำลังตรวจสอบรายการ...'),
      ]
    ]
  ];
    
  $city_select = $form_state->getValue('เอาท์พุท');
  $suburb_options = คงที่::getSuburbDropdownOptions($city_select);
        
  $รูปแบบ['sur'] = [
    '#type' => 'เลือก',
    '#options' => $suburb_options,     
    '#prefix' => '<div id="edit-city">',
    '#suffix' => '</div>',
    '#empty_option' => t('- เลือก sururb -'),
    '#default_value' => อาร์เรย์(''),
  ];
  คืนฟอร์ม $;
}

ฟังก์ชันสาธารณะ myAjaxCallback (อาร์เรย์ &$form, FormStateInterface $form_state) {
  $region_selected = $form_state->getValue('vvv_region');
  $city_options = static::getSecondDropdownOptions($region_selected);

  ถ้า ($form_state->getErrors()) {
    \Drupal::messenger()->addError($region_selected);
    $form_state->setRebuild();
  }
  
  $form['outpout']['#options'] = $city_options;
          
  ส่งคืน $form['output']; 
}
    
ฟังก์ชั่นสาธารณะ cityAjaxCallback (อาร์เรย์ &$form, FormStateInterface $form_state) {
  $city_select = $form_state->getValue('เอาท์พุท');
  $sur_data = คงที่::getSuburbDropdownOptions($city_select);

  ถ้า ($form_state->getErrors()) {
    \Drupal::messenger()->addError($city_select);
    $form_state->setRebuild();
  }

  $form['sur']['#options'] = $sur_data;

  ส่งคืน $form['sur']; 
}

เมื่อส่งแบบฟอร์ม ฉันได้รับข้อผิดพลาดต่อไปนี้

มีการระบุการเลือกที่ไม่ถูกต้อง โปรดติดต่อผู้ดูแลไซต์

เกิดอะไรขึ้นกับรหัสที่ฉันใช้

Jaypan avatar
de flag
คุณไม่สามารถเปลี่ยนค่าของตัวเลือกในการเรียกกลับ ajax จะต้องทำในการกำหนดแบบฟอร์ม คุณสามารถอ่านตัวอย่างวิธีการได้ในบทช่วยสอนนี้ที่ฉันเขียน: https://www.jaypan.com/tutorial/drupal-form-api-ajax-form-and-results-same-page
apaderno avatar
us flag
มีการพิมพ์ผิดในการเรียกกลับครั้งแรก: `$form['outpout']['#options'] = $city_options;` ควรเป็น *output* ไม่ใช่ *outpout*
Score:2
ธง us

มีข้อผิดพลาดสองข้อในรหัสที่แสดงในคำถาม

มีเพียงตัวสร้างฟอร์มเท่านั้นที่สามารถเพิ่มตัวเลือกให้กับองค์ประกอบฟอร์มได้ คุณจะได้รับข้อผิดพลาดที่คุณยกมา

มีการระบุการเลือกที่ไม่ถูกต้อง โปรดติดต่อผู้ดูแลไซต์

สิ่งที่ AJAX callback ทำคือส่งคืนองค์ประกอบแบบฟอร์มที่ต้องเปลี่ยน ในกรณีของคุณ รหัสคือรหัสต่อไปนี้

ฟังก์ชันสาธารณะ myAjaxCallback (อาร์เรย์ &$form, FormStateInterface $form_state) {
  ส่งคืน $form['output']; 
}
    
ฟังก์ชั่นสาธารณะ cityAjaxCallback (อาร์เรย์ &$form, FormStateInterface $form_state) {
  ส่งคืน $form['sur']; 
}

การเรียกกลับ AJAX สำหรับแบบฟอร์มมักไม่จัดการข้อผิดพลาดในการตรวจสอบ

ข้อผิดพลาดที่สองอยู่ในตัวสร้างแบบฟอร์ม ซึ่งใช้รหัสต่อไปนี้

$region_selected = $form_state->getValue('vvv_region');

เมื่อฟอร์มถูกสร้างขึ้นครั้งแรก $form_state->getValue('vvv_region') ไม่ส่งคืนค่าใด ๆ เนื่องจากยังไม่ได้ส่งแบบฟอร์ม แม้จะผ่าน AJAX เฉพาะเมื่อส่งแบบฟอร์มผ่าน AJAX เท่านั้น $form_state->getValue('vvv_region') ส่งกลับค่า บรรทัดนั้นจำเป็นต้องเปลี่ยนดังนี้

$region_selected = $form_state->hasValue('vvv_region') ? $form_state->getValue('vvv_region') : คีย์($region_options);

ในทำนองเดียวกัน $city_select = $form_state->getValue('เอาท์พุท'); ต้องมีการเปลี่ยนแปลง

$city_select = $form_state->hasValue('เอาท์พุท') ? $form_state->getValue('เอาท์พุท'): key($city_options);

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา