Làm cách nào để kích hoạt lập trình một lần nhấp vào nút gửi biểu mẫu được bật AJAX?


25

Tôi đang cố gắng lập trình (với jQuery) kích hoạt một nút bấm với hành vi AJAX ở dạng Drupal, nhưng cho đến nay jQuery('#edit-submit').click()không làm gì cả.

Một cú nhấp chuột thực sự vào nút đó hoạt động như dự định. Bất kỳ ý tưởng làm thế nào để làm cho nó hoạt động?


Nếu đó là nút # chỉnh sửa gửi, bạn có thể không chỉ làm $ ('mẫu'). Submit () không?
cam8001

điều đó cũng không làm việc cho tôi. Nó có thể đăng biểu mẫu theo cách không phải AJAX hoặc không làm gì cả, tùy thuộc vào một số cài đặt trong trình tạo biểu mẫu.
Daniel

Câu trả lời:


40

jQuery('#edit-submit').mousedown() - rõ ràng có một sự khác biệt lớn.


3
không làm việc cho tôi
ram4

Giải pháp này đã làm việc cho tôi. Nhấp vào nút đã thực hiện cuộc gọi ajax nhưng .click () hoặc các biến thể không .mousedown () hoạt động hoàn hảo.
Eric Goodwin

Tôi sẽ tránh sử dụng bộ chọn ID trên các thành phần của biểu mẫu. Nếu biểu mẫu được xây dựng lại trong cuộc gọi lại AJAX, ID của tất cả các thành phần sẽ thay đổi và bộ chọn jQuery của bạn sẽ không còn hoạt động.
Yuriy Babenko

Chính xác những gì Eric nói. Tôi muốn biết tại sao có sự khác biệt ... nghiêm túc, điều này dường như không có ý nghĩa.
Johnathan Elmore

@JohnathanElmore mousedown()chỉ là "phần đầu tiên" của một click()sự kiện, nó hoàn thành khi mouseup()xảy ra. Khi bạn nhấp vào một liên kết và sau đó bạn thả chuột ra ngoài khu vực của liên kết, click()thông thường không được kích hoạt và liên kết không được theo dõi. Có lẽ một cuộc gọi ajax ngăn chặn việc mouseup()bị sa thải, nhưng đây chỉ là dự đoán ...
pamatt

7

Thật ra, không cần phải đoán.

Bạn nên sử dụng các hành vi của Drupal

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

       // Your code goes here....

    }
}

Điều này sẽ cung cấp cho bạn quyền truy cập vào thuộc tính ajax của cài đặt,

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

       console.log(settings.ajax);

    }
}

Tùy thuộc vào cấu hình của bạn, bạn sẽ thấy một danh sách các yếu tố kích hoạt, với các thuộc tính khác nhau như tên của hàm gọi lại, id của bộ chọn cũng như tên của sự kiện kích hoạt.

Sau đó, bạn có thể sử dụng thông tin liên quan để kích hoạt sự kiện của bạn.

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

2
Tôi thích câu trả lời này vì nó cung cấp một kỹ thuật thú vị để khám phá cách giao tiếp với các yếu tố được tạo cho các nhà phát triển lối vào không phải Drupal có thể đang làm việc trong một dự án Drupal. +1
Lester Peabody

6

Tạo ajax gửi như sau.

 $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.
}

Sau đó, sự kiện jquery .click () sẽ hoạt động ở dạng aupax drupal.


bạn có thể đăng chức năng gọi lại mẫu không, khi tôi thử, nó sẽ không chuyển sang chức năng gọi lại
Crazyrubixfan

1
Đã thêm chức năng gọi lại :)
Leopathu


3

Trong trường hợp của tôi, các giải pháp được đề xuất ở trên không phù hợp với tôi, nhưng việc đề cập đến .mousedown () đã dẫn đến ý tưởng sau đây phù hợp với tôi (Drupal 7):

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

Có một số thông tin cơ bản hữu ích về "tại sao" đây là trường hợp trong Tham chiếu API biểu mẫu trong #ajax_prevent


Tôi không cần trình bao bọc click (), nhưng liên kết đến ngăn chặn ajax là KEY!
Ryan Hartman

2

Nhìn vào mô-đun Bộ lọc tiếp xúc tốt hơn, họ gửi biểu mẫu AJAX bằng cách tìm $ (. Ctools-auto-submit-click ') và theo dõi một lần nhấp.

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

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

sự kiện click làm việc cho tôi, trong khi sự kiện mousedown thì không.
vào

0

Bạn phải kích hoạt submitsự kiện trên mẫu. Clickmousedowncác sự kiện trên các nút không hoạt động.


Đó là những gì tôi đã thử lúc đầu và dường như nó không hoạt động chính xác. Đó là cách tôi đến đây.
vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.