Wie kann ich programmgesteuert einen Klick auf eine AJAX-fähige Schaltfläche zum Senden eines Formulars auslösen?


25

Ich versuche programmgesteuert (mit jQuery) einen Klick auf eine Schaltfläche mit AJAX-Verhalten in einer Drupal-Form auszulösen, aber bis jetzt jQuery('#edit-submit').click()wird nichts unternommen.

Ein echter Mausklick auf diese Schaltfläche funktioniert wie vorgesehen. Irgendwelche Ideen, wie es funktioniert?


Wenn es sich um eine Schaltfläche # Bearbeiten-Senden handelt, können Sie dann nicht einfach $ ('Formular'). Submit () ausführen?
cam8001

das hat auch bei mir nicht geklappt. Abhängig von einigen Einstellungen im Form Builder wird das Formular entweder nicht auf AJAX-Basis gesendet oder es werden keine Aktionen ausgeführt.
Daniel

Antworten:


40

jQuery('#edit-submit').mousedown() - Anscheinend gibt es einen großen Unterschied.


3
funktioniert nicht für mich
ram4nd

Diese Lösung hat bei mir funktioniert. Wenn Sie auf die Schaltfläche klicken, wird der Ajax-Aufruf ausgeführt, aber .click () oder Variationen funktionieren nicht, jedoch .mousedown ().
Eric Goodwin

Ich würde es vermeiden, den ID-Selektor für Formularelemente zu verwenden. Wenn das Formular während des AJAX-Rückrufs neu erstellt wird, ändern sich die IDs aller Elemente und Ihr jQuery-Selektor funktioniert nicht mehr.
Yuriy Babenko

Genau das, was Eric gesagt hat. Ich würde gerne wissen, warum es einen Unterschied gibt ... im Ernst, das scheint keinen Sinn zu ergeben.
Johnathan Elmore

@JohnathanElmore mousedown()ist nur "der erste Teil" eines click()Ereignisses, der abgeschlossen ist, wenn er mouseup()eintritt. Wenn Sie auf einen Link klicken und dann die Maustaste außerhalb des Bereichs des Links loslassen, wird der click()normalerweise nicht ausgelöst und der Link wird nicht verfolgt. Wahrscheinlich verhindert ein Ajax-Anruf das mouseup()Abfeuern, aber dies ist nur eine Vermutung ...
Pamatt

7

Eigentlich muss man nicht raten.

Sie sollten Drupal-Verhalten verwenden

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

       // Your code goes here....

    }
}

Dadurch erhalten Sie Zugriff auf die Ajax-Eigenschaft der Einstellungen.

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

       console.log(settings.ajax);

    }
}

Abhängig von Ihrer Konfiguration sollte eine Liste der auslösenden Elemente mit verschiedenen Eigenschaften angezeigt werden, z. B. dem Namen der Rückruffunktion, der Selektor-ID sowie dem Namen des auslösenden Ereignisses.

Sie können dann die relevanten Informationen verwenden, um Ihr Ereignis auszulösen.

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

2
Diese Antwort gefällt mir, weil sie eine interessante Technik bietet, um herauszufinden, wie generierte Elemente für Nicht-Drupal-Frontend-Entwickler verwendet werden können, die möglicherweise an einem Drupal-Projekt arbeiten. +1
Lester Peabody

6

Erstellen Sie Ajax Submit wie folgt.

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

Dann würde das jquery .click () -Ereignis in der Drupal-Ajax-Form funktionieren.



1
Die Rückruffunktion wurde hinzugefügt :)
Leopathu


3

In meinem Fall haben die oben empfohlenen Lösungen bei mir nicht funktioniert, aber die Erwähnung von .mousedown () hat zu der folgenden Idee geführt, die bei mir funktioniert hat (Drupal 7):

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

In der Form API-Referenz unter #ajax_prevent finden Sie einige hilfreiche Hintergrundinformationen dazu, warum dies der Fall ist


Ich brauchte den click () - Wrapper nicht, aber dieser Link zu Ajax Prevent war der Schlüssel!
Ryan Hartman

2

Mit Blick auf das Modul Better Exposed Filters übermitteln sie das AJAX-Formular, indem sie $ (.ctools-auto-submit-click ') suchen und einen Klick auslösen.

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

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

Das Klickereignis hat bei mir funktioniert, das Maus-Down-Ereignis nicht.
Uhr

0

Sie müssen das submitEreignis auf dem Formular auslösen . Clickund mousedownEreignisse auf Schaltflächen funktionieren nicht.


Das habe ich zuerst versucht und es scheint nicht richtig zu funktionieren. So bin ich hierher gekommen.
17.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.