web-dev-qa-db-fra.com

Comment déclencher par programme un clic sur un bouton d'envoi de formulaire activé AJAX?

J'essaie de déclencher par programme (avec jQuery) un clic sur le bouton avec le comportement AJAX sous une forme Drupal, mais jusqu'à présent jQuery('#edit-submit').click() ne fait rien.

A clic de souris réel ce bouton fonctionne comme prévu. Des idées pour le faire fonctionner?

26
Daniel

jQuery('#edit-submit').mousedown() - apparemment, il y a une grande différence.

43
Daniel

En fait, il n'est pas nécessaire de deviner.

Vous devez utiliser Drupal comportements

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

       // Your code goes here....

    }
}

Cela vous donnera accès à la propriété ajax des paramètres,

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

       console.log(settings.ajax);

    }
}

Selon votre configuration, vous devriez voir une liste d'éléments déclencheurs, avec diverses propriétés telles que le nom de la fonction de rappel, l'ID du sélecteur ainsi que le nom de l'événement déclencheur.

Vous pouvez ensuite utiliser les informations pertinentes pour déclencher votre événement.

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

Créez ajax submit comme suit.

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

Ensuite, l'événement jquery .click () fonctionnerait sous la forme drupal ajax).

6
Leopathu

Vous pouvez également utiliser .trigger() méthode jQuery. $('#element').trigger('click');

3
Beebee

Dans mon cas, les solutions recommandées ci-dessus n'ont pas fonctionné pour moi, mais la mention de .mousedown () a conduit à l'idée suivante qui a fonctionné pour moi (Drupal 7):

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

Il y a quelques informations de base utiles sur "pourquoi" c'est le cas dans la référence API de formulaire sous # ajax_prevent

3
David Newkerk

En regardant le module Filtres mieux exposés, ils soumettent le formulaire AJAX en trouvant $ (. Ctools-auto-submit-click ') et en déclenchant un clic.

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

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

Vous devez déclencher l'événement submit sur le formulaire. Click et mousedown les événements sur les boutons ne fonctionnent pas.

0
Catalin Motatu