ฉันมีปัญหาในการทำให้โค้ดต่อไปนี้ทำงานได้อย่างถูกต้อง:
(ฟังก์ชัน($) {
'ใช้อย่างเข้มงวด';
Drupal.behaviors.mybehavior = {
แนบ: ฟังก์ชัน (บริบท การตั้งค่า) {
// คลิกที่ภาพตัวยึด ซึ่งควรเปิดแบบฟอร์มจากนั้น
// แทนที่รูปภาพด้วยทรัพยากรวิดีโอ (เนื้อหาที่มีรั้วรอบขอบชิด)
$(document).once('abc').on('click', '.image_class', function() {
var fid = 123 // รับรหัสเอนทิตีของแบบฟอร์มจากแอตทริบิวต์ข้อมูล
var vid = 456 // รับ ID ทรัพยากรจากแอตทริบิวต์ข้อมูล
// การเรียก AJAX นี้โหลดฟอร์มและส่งกลับ OpenModalDialogCommand
// มีแบบฟอร์ม
Drupal.ajax({
URL: '/load/a/form/' + fid
}).ดำเนินการ().เสร็จสิ้น(ฟังก์ชั่น() {
var id = // รับรหัสแบบฟอร์ม Marketo
// โหลดแบบฟอร์มจาก Marketo
MktoForms2.loadForm ('cname', '123-123-123', fid, ฟังก์ชัน (แบบฟอร์ม) {
form.onSuccess (ฟังก์ชัน (จ) {
form.getFormElem().ซ่อน();
// หากส่งแบบฟอร์มสำเร็จ ให้โหลดวิดีโอ
// ทรัพยากรและวางไว้บนหน้าด้วย HTMLCommand
Drupal.ajax({
url: '/load/a/video/' + วีดีโอ
}).ดำเนินการ().เสร็จสิ้น(ฟังก์ชั่น() {
// CSS/การล้างข้อมูลพื้นฐานทำงานที่นี่
});
กลับเป็นเท็จ;
});
});
})
});
}
}
})(jQuery);
กระบวนการทั้งหมดทำงานได้อย่างถูกต้อง แต่จะทำซ้ำการเรียก AJAX ก่อนหน้านี้ในแต่ละขั้นตอน
ตัวอย่างเช่น เมื่อฉันคลิกตัวเลือกเริ่มต้น .image_class
การโทร AJAX ที่โหลดแบบฟอร์มใช้งานได้ดี
เมื่อฉันกรอกแบบฟอร์มสำเร็จ การเรียก AJAX ครั้งที่สองจะเริ่มทำงาน แต่ดูเหมือนว่าจะเรียกการเรียก AJAX ครั้งแรกอีกครั้งอย่างมีประสิทธิภาพ โดยวางแบบฟอร์มที่เพิ่งกรอกเสร็จและลบกลับบนหน้า เปิดกล่องโต้ตอบอีกครั้ง
ทุกอย่างทริกเกอร์อย่างถูกต้อง ฉันไม่สามารถหาวิธีทำให้กระบวนการนี้ทำงานโดยไม่ทริกเกอร์การเรียก AJAX ก่อนหน้าทั้งหมดอีกครั้ง
ขอบคุณ!