Score:0

ฉันจะข้ามการเรียกใช้ฟังก์ชันการตรวจสอบแบบกำหนดเองในฟอร์มที่มี AJAX แบบเลื่อนลงได้อย่างไร

ธง in

ฉันใช้ 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 จากนั้นเรียกตัวจัดการการตรวจสอบเพื่อเก็บข้อมูลในฐานข้อมูล

apaderno avatar
us flag
*Headless Drupal* means Drupal isn't used to show pages nor forms to the users. Your code is altering a form Drupal should not show to users. Also, *headless Drupal* doesn't write to database tables created by other software.
sonfd avatar
in flag
Shouldn't you be writing to table once the form has been successfully submitted? Not during validation?
taggartJ avatar
cn flag
ในความเป็นจริง การตรวจสอบความถูกต้องถูกเรียกทุกครั้งที่มีการเปลี่ยนแปลง ajax คุณควรเปลี่ยนรหัสการตรวจสอบความถูกต้องที่กำหนดเองของคุณเพื่อตรวจสอบว่ามีค่าอยู่หรือไม่ หากเรียกใช้การตรวจสอบความถูกต้อง หากไม่ใช่
Raja Chakraborty avatar
in flag
สวัสดี @apaderno โปรดดูคำชี้แจงของฉัน - 1. Headless Drupal หมายความว่า Drupal ไม่ได้ใช้เพื่อแสดงหน้าหรือแบบฟอร์มแก่ผู้ใช้ - ส่วนหน้าของแอปพลิเคชันของฉันมีเมนูที่นำทางผู้ใช้ไปยังแบบฟอร์ม drupal 2. Drupal หัวขาดไม่เขียนไปยังตารางฐานข้อมูลที่สร้างโดยซอฟต์แวร์อื่น - ในฟังก์ชั่นการตรวจสอบ ฉันมี api หนึ่งรายการที่โพสต์ข้อมูลในแบบฟอร์มไปยังฐานข้อมูล. net
Raja Chakraborty avatar
in flag
สวัสดี @taggartJ ฟังก์ชันการตรวจสอบถูกเรียกทุกครั้งที่มีการโทร ajax หรือไม่
apaderno avatar
us flag
หากผู้ใช้เห็นหน้าหรือฟอร์มของ Drupal แสดงว่าไม่ใช่ Drupal ที่ไม่มีส่วนหัว ใช่ ตัวจัดการการตรวจสอบความถูกต้องและการส่งจะถูกเรียกเมื่อ AJAX เกี่ยวข้องด้วย แม้แต่วิธีการสร้างฟอร์มก็ถูกเรียกหลังจากเหตุการณ์ AJAX
taggartJ avatar
cn flag
ใช่มันควรทำใช่
Score:0
ธง cn

เพื่อป้องกันการส่งแบบฟอร์มเมื่อส่งแบบฟอร์มด้วย AJAX (เมื่อคุณเปลี่ยนสถานะของแบบฟอร์มด้วย AJAX) ในตัวจัดการการตรวจสอบให้ใช้ $form_state->setRebuild();

โพสต์คำตอบ

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