วิธีการกระตุ้นให้เกิดการคลิกบนปุ่มส่งแบบฟอร์มที่เปิดใช้งาน AJAX โดยทางโปรแกรม


25

ฉันพยายามเขียนโปรแกรม (ด้วย jQuery) เรียกใช้การคลิกบนปุ่มที่มีพฤติกรรม AJAX ในรูปแบบ Drupal แต่จนถึงขณะjQuery('#edit-submit').click()นี้ไม่ได้ทำอะไรเลย

การคลิกเมาส์จริงบนปุ่มนั้นจะทำงานตามที่ต้องการ ความคิดใด ๆ ที่จะทำให้มันทำงานอย่างไร


หากเป็นปุ่ม # edit-submit คุณจะไม่เพียงแค่ทำ $ ('ฟอร์ม') ส่ง ()?
cam8001

ที่ไม่ทำงานสำหรับฉันอย่างใดอย่างหนึ่ง มันโพสต์แบบฟอร์มในลักษณะที่ไม่ใช่ AJAX หรือไม่ทำอะไรเลยขึ้นอยู่กับการตั้งค่าบางอย่างในตัวสร้างแบบฟอร์ม
Daniel

คำตอบ:


40

jQuery('#edit-submit').mousedown() - เห็นได้ชัดว่ามีความแตกต่างใหญ่


3
ไม่ได้ผลสำหรับฉัน
ram4nd

วิธีนี้ใช้ได้ผลสำหรับฉัน การคลิกที่ปุ่มดำเนินการโทร ajax แต่ .click () หรือรูปแบบต่างๆไม่ได้อย่างไรก็ตาม .mousedown () ทำงานได้อย่างสมบูรณ์
Eric Goodwin

ฉันจะหลีกเลี่ยงการใช้ตัวเลือก ID ในองค์ประกอบของแบบฟอร์ม หากฟอร์มถูกสร้างใหม่ในระหว่างการโทรกลับ AJAX รหัสขององค์ประกอบทั้งหมดจะเปลี่ยนไปและตัวเลือก jQuery ของคุณจะไม่ทำงานอีกต่อไป
Yuriy Babenko

สิ่งที่ Eric พูด ฉันต้องการทราบว่าทำไมถึงมีความแตกต่าง ... อย่างจริงจังนี่ดูเหมือนจะไม่สมเหตุสมผล
Johnathan Elmore

@JohnathanElmore mousedown()เป็นเพียง "ส่วนแรก" ของclick()เหตุการณ์ซึ่งจะสมบูรณ์เมื่อmouseup()เกิดขึ้น เมื่อคุณคลิกที่ลิงก์จากนั้นคุณปล่อยเมาส์ออกไปนอกพื้นที่ของลิงก์สิ่งที่click()มักจะไม่ได้ถูกเรียกใช้และลิงก์จะไม่ถูกติดตาม อาจจะมีสายเรียกอาแจ็กซ์จะช่วยป้องกันmouseup()การถูกไล่ออก แต่นี้เป็นเพียงการคาดเดา ...
pamatt

7

ที่จริงแล้วไม่จำเป็นต้องเดา

คุณควรใช้พฤติกรรมของ Drupal

Drupal.behaviors.yourFunctionName = {
    attach:function (context, settings) {

       // Your code goes here....

    }
}

สิ่งนี้จะทำให้คุณสามารถเข้าถึงคุณสมบัติ ajax ของการตั้งค่า

Drupal.behaviors.yourFunctionName = {
    attach:function (context, settings) {

       console.log(settings.ajax);

    }
}

ขึ้นอยู่กับการกำหนดค่าของคุณคุณจะเห็นรายการองค์ประกอบที่มีการทริกเกอร์ด้วยคุณสมบัติต่าง ๆ เช่นชื่อของฟังก์ชั่นการโทรกลับ id ของตัวเลือกเช่นเดียวกับชื่อของเหตุการณ์ทริกเกอร์

จากนั้นคุณสามารถใช้ข้อมูลที่เกี่ยวข้องเพื่อเริ่มกิจกรรมของคุณ

// $(selector).trigger(eventName);
// for example...
$('#edit-product-id-15', context ).trigger('change');

2
ฉันชอบคำตอบนี้เพราะมันมีเทคนิคที่น่าสนใจในการค้นหาวิธีการเชื่อมต่อกับองค์ประกอบที่สร้างขึ้นสำหรับนักพัฒนาส่วนหน้าที่ไม่ใช่ Drupal ที่อาจทำงานกับโครงการ Drupal +1
Lester Peabody

6

สร้าง ajax submit เหมือนดังต่อไปนี้

 $form['button'] = array(
    '#type' => 'button',
    '#value' => 'Click',
    '#ajax' => array(
      'callback' => '_kf_reading_user_points',
      'wrapper' => 'reading-user-points',
      'method' => 'replace',
      'event' => 'click',
    ),
  );

function _kf_reading_user_points(&$form, &$form_state) {
  // Something within the callback function.
}

จากนั้นเหตุการณ์ jquery .click () จะทำงานในรูปแบบ drupal ajax


คุณสามารถโพสต์ฟังก์ชั่นการโทรกลับตัวอย่างเช่นกันเมื่อฉันพยายามมันจะไม่ไปฟังก์ชั่นการโทรกลับ
Crazyrubixfan

1
เพิ่มฟังก์ชั่นการโทรกลับ :)
Leopathu


3

ในกรณีของฉันการแก้ปัญหาที่แนะนำข้างต้นไม่ได้ผลสำหรับฉัน แต่การกล่าวถึง. mousedown () ทำให้เกิดแนวคิดต่อไปนี้ที่เหมาะกับฉัน (Drupal 7):

$('#custom-submit-button').click(function() {
  $('#ajax-submit-button').trigger('mousedown');
});

มีข้อมูลพื้นฐานที่เป็นประโยชน์เกี่ยวกับ "สาเหตุ" ในกรณีนี้ในการอ้างอิงแบบฟอร์ม API ภายใต้#ajax_prevent


ฉันไม่ต้องการตัวห่อคลิก () แต่ลิงก์ไปยังการป้องกัน Ajax นั้นเป็นกุญแจสำคัญ!
Ryan Hartman

2

ดูที่โมดูลตัวกรองการเปิดเผยที่ดีกว่าพวกเขาส่งแบบฟอร์ม AJAX โดยค้นหา $ (. ctools-auto-submit-click ') และเปิดการคลิก

<?php
// ... near line 190 of better_exposed_filters.js

// Click the auto submit button.
$(this).parents('form').find('.ctools-auto-submit-click').click();
?>

เหตุการณ์คลิกทำงานได้สำหรับฉันในขณะที่เหตุการณ์ mousedown ไม่ได้
aross

0

คุณต้องทริกเกอร์submitเหตุการณ์ในแบบฟอร์ม Clickและmousedownกิจกรรมบนปุ่มไม่ทำงาน


นั่นคือสิ่งที่ฉันพยายามในตอนแรกและดูเหมือนว่าจะทำงานไม่ถูกต้อง ฉันมาถึงที่นี่ได้อย่างไร
aross
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.