Score:1

ใช้ #submit โทรกลับในช่องข้อความ

ธง cn

เราจำเป็นต้องเพิ่ม 'ฟิลด์ที่ทำซ้ำได้' ลงในแบบฟอร์มโดยอิงตามอินพุตที่ให้ไว้ในฟิลด์ข้อความ โดยปกติแล้ว เราใช้ปุ่ม 'เพิ่มปุ่มอื่น' เพื่อติดตามจำนวนฟิลด์ที่จะแสดงผลใน สร้างแบบฟอร์ม ()และอัปเดตหมายเลขนั้นในการส่งการโทรกลับบนปุ่ม

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

เราพยายามใช้ #ส่ง บนฟิลด์ข้อความ แต่ #submit ดูเหมือนจะไม่ทริกเกอร์บนฟิลด์ข้อความ เนื่องจากเราได้เพิ่มคำสั่งพิมพ์ เช่นเดียวกับ $form-state->set() ในนั้นและพยายามพิมพ์ออกมา $form_state->get() ในแบบฟอร์มไม่มีประโยชน์

เนื่องจากคุณไม่สามารถอัปเดต form_state ภายในการโทรกลับ ajax เราจึงไม่สามารถหาวิธีบรรลุสิ่งที่เราต้องการได้ (เพิ่มกลุ่มฟิลด์อื่นเมื่อป้อนข้อความลงใน textarea)

มีวิธีอื่นที่เราสามารถทำได้หรือไม่?

(เราอนุญาตให้เพิ่มได้ 10 กลุ่มต่อการส่งเท่านั้น ดังนั้นในฐานะ 'วิธีแก้ปัญหา' เราจะเพิ่ม 10 กลุ่มใน buildForm แบบไดนามิก จากนั้นจึงใช้ #รัฐ เพื่อซ่อนแต่ละฟิลด์หากฟิลด์ข้อความก่อนหน้านี้ไม่มีข้อมูล แต่สิ่งนี้ไม่อนุญาตให้เราเพิ่มปุ่ม 'ลบ' สำหรับแต่ละฟิลด์ข้อความ เพื่อให้ผู้ใช้สามารถลบฟิลด์ข้อความที่ไม่ต้องการใช้)

4uk4 avatar
cn flag
เวิร์กโฟลว์พื้นฐานของคำขอ Ajax คือการตรวจสอบการสร้างฟอร์มใหม่ `$form_state->getTriggeringElement()` และสร้างฟอร์มด้วยองค์ประกอบฟอร์มใหม่ได้มากเท่าที่คุณต้องการ
Gold avatar
kz flag
มุม 'ฟิลด์ที่ทำซ้ำได้' ของสิ่งนี้ให้ความรู้สึกเหมือนกับว่า [Inline Entity Forms](https://www.drupal.org/project/inline_entity_form) จะกล่าวถึง สิ่งเหล่านี้ทำงานได้ดีกับ States API และยังให้คุณกำหนดจำนวนรายการขั้นต่ำ/สูงสุด/ไม่จำกัด
Ex0r avatar
cn flag
นี่เป็นรูปแบบโมดูลทั้งหมดที่สร้างและใช้งานได้ภายในเมธอด buuldForm() ไม่มีเอนทิตีที่แนบมากับแบบฟอร์ม
Ex0r avatar
cn flag
และเท่าที่ $form_state ฉันได้รับองค์ประกอบทริกเกอร์แล้ว แต่ฉันไม่สามารถอัปเดตสถานะของแบบฟอร์มภายในการโทรกลับ ajax ดังนั้นฉันจึงไม่สามารถสร้างแบบฟอร์มขึ้นใหม่ด้วยจำนวนฟิลด์ที่ต้องการ
Jaypan avatar
de flag
คุณสามารถเพิ่มปุ่มส่งที่เปิดใช้งาน ajax ด้วย CSS จากนั้นใช้ JS เพื่อ 'คลิก' บนคีย์อัพ (หรือเบลอหรืออะไรก็ตาม) เพื่อทริกเกอร์ #ajax คุณสามารถวางตัวจัดการการส่งของคุณบนปุ่มส่ง
4uk4 avatar
cn flag
ไม่จำเป็นต้องใช้ตัวจัดการการส่งเมื่อสร้างแบบฟอร์มใหม่ผ่าน Ajax สิ่งที่คุณพยายามทำในตัวจัดการการส่งให้ย้ายไปยัง buildForm() ตรวจสอบองค์ประกอบทริกเกอร์ใน $form_state

โพสต์คำตอบ

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