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?
jQuery('#edit-submit').mousedown()
- apparemment, il y a une grande différence.
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');
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).
Vous pouvez également utiliser .trigger()
méthode jQuery. $('#element').trigger('click');
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
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();
?>
Vous devez déclencher l'événement submit
sur le formulaire. Click
et mousedown
les événements sur les boutons ne fonctionnent pas.