Jak programowo uruchomić kliknięcie przycisku przesyłania formularza obsługującego AJAX?


25

Próbuję programowo (za pomocą jQuery) wywołać kliknięcie przycisku z zachowaniem AJAX w formie Drupala, ale jak dotąd jQuery('#edit-submit').click()nic nie robi.

Prawdziwy myszy na który działa przycisk zgodnie z przeznaczeniem. Wszelkie pomysły, jak to zrobić?


Jeśli jest to przycisk # edytuj-prześlij, czy nie możesz po prostu zrobić $ („formularz”). Submit ()?
— cam8001,

to też nie działało dla mnie. Albo wysyła formularz w sposób inny niż AJAX, albo nic nie robi, zależy to od niektórych ustawień w kreatorze formularzy.
— Daniel

Odpowiedzi:


40

jQuery('#edit-submit').mousedown() - najwyraźniej jest duża różnica.


3
nie działa dla mnie
— ram4nd

To rozwiązanie działało dla mnie. Kliknięcie przycisku wykonało wywołanie ajax, ale .click () lub odmiany nie działały jednak .mousedown () działa idealnie.
— Eric Goodwin,

Unikałbym używania selektora ID w elementach formularza. Jeśli formularz zostanie odbudowany podczas wywołania zwrotnego AJAX, identyfikatory wszystkich elementów zmienią się, a selektor jQuery przestanie działać.
— Yuriy Babenko

Dokładnie to, co powiedział Eric. Chciałbym wiedzieć, dlaczego istnieje różnica ... poważnie, to wydaje się nie mieć sensu.
— Johnathan Elmore,

@JohnathanElmore mousedown()to tylko „pierwsza część” click()wydarzenia, które jest kompletne, gdy mouseup()nastąpi. Kliknięcie łącza, a następnie zwolnienie myszy poza obszarem łącza, click()zwykle nie powoduje zwolnienia, a łącze nie jest śledzone. Prawdopodobnie wywołanie ajax zapobiega mouseup()zostać zwolniony, ale to tylko przypuszczenie ...
— pamatt

7

Właściwie nie trzeba zgadywać.

Powinieneś używać zachowań Drupala

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

       // Your code goes here....

    }
}

To da ci dostęp do właściwości ajax ustawień,

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

       console.log(settings.ajax);

    }
}

W zależności od konfiguracji powinna zostać wyświetlona lista elementów wyzwalających z różnymi właściwościami, takimi jak nazwa funkcji zwrotnej, identyfikator selektora, a także nazwa zdarzenia wyzwalającego.

Następnie możesz użyć odpowiednich informacji, aby uruchomić wydarzenie.

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

2
Podoba mi się ta odpowiedź, ponieważ oferuje ciekawą technikę odkrywania, jak łączyć się z generowanymi elementami dla programistów frontendów innych niż Drupal, którzy mogą pracować nad projektem Drupal. +1
— Lester Peabody

6

Utwórz ajax zgłoś jak poniżej.

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

Wtedy zdarzenie jquery .click () działałoby w formie drupal ajax.


czy możesz opublikować przykładową funkcję oddzwaniania, kiedy próbowałem, nie będzie to funkcja oddzwonienia
— Crazyrubixfan

1
Dodano funkcję oddzwaniania :)
— Leopathu,


3

W moim przypadku wyżej zalecane rozwiązania nie działały dla mnie, ale wzmianka o .mousedown () doprowadziła do następującego pomysłu, który zadziałał dla mnie (Drupal 7):

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

Istnieje kilka pomocnych informacji na temat „dlaczego”, tak jest w formularzu Dokumentacja interfejsu API pod #ajax_prevent


Nie potrzebowałem opakowania click (), ale ten link do strony ajax zapobiegał KEY!
— Ryan Hartman

2

Patrząc na moduł Better Exposed Filters, przesyłają formularz AJAX, znajdując $ (. Ctools-auto-upload-click ”) i uruchamiając kliknięcie.

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

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

zdarzenie kliknięcia działało dla mnie, a zdarzenie mousedown nie.
— aross

0

Musisz uruchomić submitzdarzenie w formularzu. Clicki mousedownzdarzenia na przyciskach nie działają.


Właśnie tego próbowałem na początku i wydaje się, że nie działa poprawnie. Tak się tu dostałem.
— aross
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.