Score:-3

ฉันจะอ่านแอตทริบิวต์ขององค์ประกอบจาก $form_state ได้อย่างไร

ธง in

ฉันพยายามซ่อนรหัสเอนทิตีจากฟิลด์เติมข้อความอัตโนมัติ ฉันดาวน์โหลดสคริปต์ jquery ที่ลบรหัสวงเล็บและอัปเดตองค์ประกอบเติมข้อความอัตโนมัติด้วยองค์ประกอบใหม่ จากนั้นจึงเขียนค่าทั้งหมดลงในข้อมูลขององค์ประกอบเช่นนี้

$(event.target).data('มูลค่าจริง','6');

ฉันได้อัปเดตสิ่งนี้เพื่อใช้ attr แทน data ฉันไม่สามารถอ่านข้อมูลนี้จาก Drupal form_state ของฉันได้

ฉันตั้งค่าแอตทริบิวต์ข้อมูลในองค์ประกอบการเติมข้อความอัตโนมัติโดยใช้ jquery เช่นนี้

$(event.target).attr('มูลค่าจริง','6');

ฉันจะรับค่านี้จากวัตถุ $formstate หรือ $form ในฟังก์ชันส่งแบบฟอร์มได้อย่างไร โดยใช้ dpm($form['ชื่อธาตุ']) ไม่แสดงแอตทริบิวต์นี้ด้วยซ้ำ

ฉันพยายามแล้ว $formstate->getValue(). ไม่ทำงาน?

นี่คือสคริปต์ที่ฉันใช้ ...

ซ่อน jquery id เติมข้อความอัตโนมัติ

แค่สงสัยว่าเหตุใด jquery จึงเปลี่ยนค่าของกล่องข้อความเติมข้อความอัตโนมัติได้สำเร็จ แต่ไม่สามารถเปลี่ยนแอตทริบิวต์ในองค์ประกอบเดียวกันได้

id flag
เนื่องจาก JavaScript เพิ่มแอตทริบิวต์ ฉันไม่เห็นว่าระบบแบบฟอร์มของ Drupal จะรู้เรื่องนี้ได้อย่างไร
ilechcod avatar
in flag
ขอบคุณ Cilefen แต่ฉันได้ลองเพิ่มแอตทริบิวต์ให้กับองค์ประกอบฟอร์มโดยใช้ Drupal `'#attributes => ['test']` แล้วลองเปลี่ยนค่าแอตทริบิวต์ใน jquery แต่ formstate ยังคงส่งคืนค่า 'test' เป็นค่า
id flag
หากคุณลองด้วยรหัสอื่นแสดงว่าเป็นคำถามอื่น แอตทริบิวต์ของข้อมูลไม่ใช่แอตทริบิวต์ของข้อมูลหากไม่ได้ขึ้นต้นด้วย `data-` https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
Score:1
ธง id

สิ่งนี้เป็นไปไม่ได้ตามที่เขียนไว้ ระบบแบบฟอร์มของ Drupal ไม่มีข้อมูลเกี่ยวกับแอตทริบิวต์ที่เพิ่มโดย JavaScript เท่านั้น

ระบบแบบฟอร์มของ Drupal ไม่มีข้อมูลเกี่ยวกับแอตทริบิวต์ แก้ไข โดยจาวาสคริปต์เท่านั้น

ilechcod avatar
in flag
ขอบคุณ Cilefen แต่เห็นได้ชัดว่าสิ่งนี้ไม่ได้ช่วยฉันเลย ฉันจำเป็นต้องรู้วิธีแก้ไขแอตทริบิวต์ขององค์ประกอบฟอร์มที่มีอยู่และอ่านจาก Drupal 8 อย่างไรก็ตาม ปกติแล้ว ajax มักใช้เพื่อแทนที่ค่าฟิลด์ข้อความโดยใช้ jquery ได้โปรดฉันจะบรรลุผลนี้ได้อย่างไร
ilechcod avatar
in flag
คำตอบของคุณไม่ได้ชี้ให้ฉันเห็นทิศทางที่ถูกต้องว่าจะบรรลุเป้าหมายได้อย่างไร
apaderno avatar
us flag
คำตอบนี้ถูกต้อง: ใน Drupal, AJAX ที่ใช้ในแบบฟอร์มยังคงเกี่ยวข้องกับโค้ด PHP PHP จะไม่ทราบเกี่ยวกับแอตทริบิวต์ที่เพิ่มโดยโค้ด JavaScript
id flag
คำถามถามถึงวิธีการทำเช่นนี้กับ JavaScript ด้วยวิธีเฉพาะ ผมตอบตามตรงว่าเป็นไปไม่ได้ ถามคำถามอื่นสำหรับคำตอบอื่น ฉันไม่รู้ว่าคุณกำลังพยายามทำอะไร
id flag
ฉันแค่คาดเดาแต่คุณอาจต้องใช้ Ajax API https://www.drupal.org/docs/drupal-apis/javascript-api/ajax-forms
ilechcod avatar
in flag
ขอบคุณ Cilefenฉันได้อัปเดตคำถามเพื่อแสดงสิ่งที่ฉันพยายามทำ นอกจากนี้ ฉันไม่สามารถทำสิ่งนี้ได้โดยใช้ Ajax ที่เลือก เนื่องจากฉันใช้ Drupal 8 ขอบคุณ
cn flag
@ilechcod ดูเหมือนว่าคุณอาจเข้าใจผิดโดยพื้นฐานว่ารูปแบบ HTML ทำงานอย่างไร สิ่งที่สามารถส่งได้คือค่าปัจจุบันขององค์ประกอบอินพุต แอตทริบิวต์ตามอำเภอใจ เช่น สิ่งที่คุณเพิ่มจะไม่ถูกส่ง คุณสามารถทำอะไรก็ได้ที่คุณต้องการด้วย JS เพื่อจัดการค่าก่อนที่ค่าจะถูกส่ง แต่เบราว์เซอร์ที่ทำงานเองจะไม่พยายามส่งแอตทริบิวต์ไปยังการดำเนินการของฟอร์ม
ilechcod avatar
in flag
@Clive - กล่าวอีกนัยหนึ่งคือเป็นไปไม่ได้ที่จะจัดเก็บบางอย่างในแอตทริบิวต์องค์ประกอบที่มีอยู่โดยใช้ jquery แล้วอ่านแอตทริบิวต์จากระบบแบบฟอร์ม Drupal ถูกต้อง. ถ้าอย่างนั้นฉันจะบรรลุจุดประสงค์ด้วยวิธีอื่นได้อย่างไร ฉันรู้ว่าฉันสามารถเริ่มเหตุการณ์ ajax จากการเติมข้อความอัตโนมัติ ตั้งค่าแอตทริบิวต์โดยใช้คำสั่ง invoke แล้วส่งคืน ajaxrespose แต่ฉันรู้สึกว่าเป็นการดีที่จะตั้งค่าแอตทริบิวต์ของการเติมข้อความอัตโนมัติในที่เดียวกับที่ตั้งค่าไว้ - ในตัวจัดการการเลือก นั่นคือรหัสที่สะอาดกว่า ดังนั้นสิ่งที่คุณคิดว่า? ขอบคุณ
cn flag
วิธีหนึ่งคือการเพิ่มฟิลด์ที่ซ่อนอยู่ (`'#type' => 'hidden'`) และตั้งค่าด้วย JS ที่ควรได้รับในการส่งแบบฟอร์ม

โพสต์คำตอบ

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