ฉันมีวิดเจ็ตที่มีตัวควบคุมจาวาสคริปต์แนบมาด้วย
หากวิดเจ็ตปรากฏขึ้นเมื่อโหลดหน้าผู้ดูแลระบบวิดเจ็ตตัวควบคุมจะทำงานอย่างถูกต้อง
เมื่อฉันเพิ่มวิดเจ็ตใหม่มันไม่ทำงานอย่างถูกต้องฉันได้รับมาร์กอัป แต่ไม่มีเหตุการณ์จาวาสคริปต์ที่จะมีผล
ถ้าฉันบันทึกวิดเจ็ตใหม่เมื่อรีโหลดแบบฟอร์มตัวควบคุมจะถูกสร้างขึ้นอย่างถูกต้องและตอนนี้ทำงานได้
การรีเฟรชหน้ายังช่วยแก้ไขปัญหา แต่สำหรับวิดเจ็ตที่มีอยู่เท่านั้น วิดเจ็ตใหม่ยังคงมีปัญหานี้อยู่
โดยเฉพาะฉันกำลังเรียกใช้เลือกในอินพุตที่เลือกที่จุดเหล่านี้:
- เอกสารพร้อม
- ajaxComplete
ฉันตรวจสอบแล้วว่ารหัสของฉันทำงานในแต่ละกิจกรรมตามต้องการ แต่ผลลัพธ์ไม่เป็นไปตามที่คาดไว้
นี่คือปลั๊กอินทดสอบที่แสดงถึงปัญหา:
https://gist.github.com/Tarendai/8466299
คุณจะเห็นว่าฉันมีเคาน์เตอร์ที่เพิ่มขึ้นทุกองค์ประกอบที่เลือกพบว่ามันสามารถแปลงได้
หมายเหตุ:
- เมื่อหน้าวิดเจ็ตโหลดฉันสามารถเห็นตัวนับเพิ่มขึ้นในคอนโซล JS ตามที่คาดไว้
- เมื่อฉันเพิ่มวิดเจ็ตใหม่รหัสจะถูกรัน แต่มันล้มเหลวในการค้นหาองค์ประกอบที่เลือกใด ๆ ที่มันสามารถทำงานได้ตามที่แสดงโดย found.length ที่ 0 ซึ่งไม่ควรเป็นเช่นนี้เพราะวิดเจ็ตใหม่ทุกประเภทนั้นควร มีองค์ประกอบที่เลือก
- อิลิเมนต์ที่เลือกมีคลาสที่จะระบุคลาสนี้จะถูกลบออกเมื่อมีการใช้ไลบรารีเลือกเพื่อป้องกันการทำซ้ำและการประมวลผลซ้ำบนวิดเจ็ตที่มีอยู่
- ก่อนที่จะใช้ selectize ฉันใช้ Select2 ซึ่งมีปัญหาเดียวกัน
- การแสดงความคิดเห็นรหัส AJAX ฉันคาดหวังว่าวิดเจ็ตใหม่จะมีอินพุตเลือกแบบมาตรฐาน พวกเขาไม่ได้. ฉันไม่รู้ว่าทำไมในกรณีนี้
ดังนั้นฉันจะทำให้ตัวเลือกควบคุมทำงานโดยไม่บอกผู้ใช้ให้รีเฟรช / คลิกบันทึกก่อนทำการเปลี่ยนแปลงได้อย่างไร
jQuery( document ).ajaxStop( function() {
ส่วนเพื่อที่ฉันจะสามารถเริ่มต้นการควบคุมในวิดเจ็ตที่โหลดใหม่ อย่างไรก็ตามหากฉันลบบรรทัดนั้นฉันคาดว่าวิดเจ็ตใหม่จะมีอินพุตเลือก HTML มาตรฐาน แต่พวกเขาจะไม่ = s
widget-updated
และwidget-added
กิจกรรม นอกจากนี้ผมอยากจะเน้นในรหัส @michaeljames ใช้ของ #widgets-right
id ตรวจสอบให้แน่ใจว่าได้ใช้เพื่อกำหนดเป้าหมายองค์ประกอบวิดเจ็ตที่ใช้งานอยู่ภายในรหัส JS ของคุณมิฉะนั้นคุณอาจได้รับองค์ประกอบที่ซ้ำกันเนื่องจากรหัสของคุณอาจเลือกองค์ประกอบวิดเจ็ตที่ไม่ได้ใช้งานที่ซ่อนอยู่ทางด้านซ้ายของหน้าจอ
.on()
วิธีการใช้ jQuerys ซึ่งต้องการให้คุณผูกเหตุการณ์กับเอกสาร อย่างไรก็ตามเหตุการณ์ใดที่จะเหมาะสมฉันไม่แน่ใจในตอนนี้ ในที่สุดก็เป็นเพราะการผูกเดิมของคุณเป็นตัวแทนของรุ่นเริ่มต้นของ DOM เมื่อหน้าโหลดและส่วนใหญ่จะตาบอดองค์ประกอบใหม่ (เนื้อหาวิดเจ็ต) ที่จะถูกเพิ่มผ่านทางอาแจ็กซ์ หวังว่าจะชี้ให้คุณในทิศทางที่ถูกต้องถ้าไม่ฉันสามารถตอบได้ดีขึ้นเมื่อฉันทำงาน