ฉันใช้ Drupal แบบไม่มีส่วนหัวกับมิดเดิลแวร์ .NET ฉันมีแบบฟอร์ม Drupal 9ฟอร์มนี้มีองค์ประกอบแบบเลื่อนลงสองรายการซึ่งจะถูกกรอกโดยขึ้นอยู่กับค่าที่เลือกในเมนูแบบเลื่อนลงที่สาม ฉันมีตัวจัดการการตรวจสอบความถูกต้องแบบกำหนดเองหลังจากองค์ประกอบดร็อปดาวน์ AJAX เหล่านั้น ซึ่งฉันเก็บข้อมูลบางส่วนไว้ในฐานข้อมูล .NET
นี่คือรหัสของฉันสำหรับ hook_form_alter()
.
$form['technology_type'] = [
'#type' => 'เลือก',
'#title' => t('ประเภทเทคโนโลยี'),
'#options' => $tech_type_options,
'#default_value' => $t_selected_option,
'#อาแจ็กซ์' => [
'callback' => 'techlistDropdownCallback',
'wrapper' => 'techlist-fieldset-container',
'เหตุการณ์' => 'เปลี่ยนแปลง',
]
];
ถ้า ($t_selected_option != '') {
$tech_options = array(0 => '- ไม่มี -');
$tech_options = custom_authorization_tech_options($t_selected_option);
}
อื่น {
$tech_options = array(0 => '- ไม่มี -');
}
$form['techlist-select-fieldset-container']= [
'#type' => 'คอนเทนเนอร์',
'#attributes' => ['id' => 'techlist-fieldset-container'],
];
$form['techlist-select-fieldset-container']['source_tech'] = [
'#type' => 'เลือก',
'#title' => t('ซอร์สเทค'),
'#options' => $tech_options,
'#default_value' => !empty($source_tech_value) ? $source_tech_value : $form_state->getValue('source_tech'),
'#multiple' => จริง,
];
$form['techlist-select-fieldset-container']['target_tech'] = [
'#type' => 'เลือก',
'#title' => t('เทคโนโลยีเป้าหมาย'),
'#options' => $tech_options,
'#default_value' => !empty($target_tech_value) ? $target_tech_value : $form_state->getValue('target_tech'),
'#multiple' => จริง,
];
ถ้า ($t_selected_option == 0) {
$form['techlist-select-fieldset-container']['source_tech']['#title'] = t('Source Tech (คุณต้องเลือกประเภทเทคโนโลยีก่อน)');
$form['techlist-select-fieldset-container']['source_tech']['#disabled'] = TRUE;
$form['techlist-select-fieldset-container']['target_tech']['#title'] = t('Target Tech (คุณต้องเลือกประเภทเทคโนโลยีก่อน)');
$form['techlist-select-fieldset-container']['target_tech']['#disabled'] = TRUE;
}
array_unshift($form['#validate'],'custom_authorization_mak_form_validate');
เมื่อใดก็ตามที่ดร็อปดาวน์ที่ขึ้นต่อกันเหล่านี้เต็มไปด้วยค่า ฟังก์ชันการตรวจสอบความถูกต้องจะถูกเรียกใช้ และข้อมูลที่ไม่สมบูรณ์จะถูกจัดเก็บโดยอัตโนมัติในฐานข้อมูลแม้ว่าจะไม่ได้กดปุ่มบันทึกของแบบฟอร์มก็ตาม
ฉันจะหลีกเลี่ยงปัญหาแปลก ๆ นี้ได้อย่างไร
ฉันแค่ต้องการเติมองค์ประกอบแบบเลื่อนลงโดยใช้ AJAX จากนั้นเรียกตัวจัดการการตรวจสอบเพื่อเก็บข้อมูลในฐานข้อมูล