J'ai un formulaire simple avec la méthode GET comme suit ...
function MYMODULE_form($form, &$form_state) {
$form['#method'] = 'get';
$params = drupal_get_query_parameters();
$form['cat'] = array(
'#type' => 'select',
'#title' => t('Categories'),
'#options' => $categories,
'#default_value' => isset($params['cat']) ? $params['cat'] : '',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
}
GET contourne réellement les fonctions de soumission et de validation par défaut, ce qui me convient. Je souhaite soumettre ce formulaire sans bouton Soumettre, lorsque la valeur du champ "Catégories" est modifiée.
function MYMODULE_form($form, &$form_state) {
$form['#method'] = 'get';
$params = drupal_get_query_parameters();
$form['cat'] = array(
'#type' => 'select',
'#title' => t('Categories'),
'#options' => $categories,
'#default_value' => isset($params['cat']) ? $params['cat'] : '',
'#ajax' => array(
'callback' => 'MYMODULE_form_submit',
),
);
}
Comment dois-je procéder?
Voici comment j'ai pu le faire en utilisant des attributs ...
'#attributes' => array('onchange' => 'this.form.submit();'),
C'était donc simple ...
function MYMODULE_form($form, &$form_state) {
$form['#method'] = 'get';
$params = drupal_get_query_parameters();
$form['cat'] = array(
'#type' => 'select',
'#title' => t('Categories'),
'#options' => $categories,
'#default_value' => isset($params['cat']) ? $params['cat'] : '',
'#attributes' => array('onchange' => 'this.form.submit();'),
);
}
Maintenant, je peux soumettre un formulaire lorsque le champ est modifié.
Comme ça?
css:
MY_FORM_SELECTOR input[type="submit"] {display:none;}
sans pour autant #ajax
propriété:
JS:
$('CAT_SELECT').change(function() {
$(this).closest('form').submit();
});
ou avec #ajax
propriété sur le champ de soumission:
$('CAT_SELECT').change(function() {
$(this).closest('form').find('input[type=submit]').click();
});
MISE À JOUR:
scripts[] = JSFILENAME.js
code:
(function ($) {
Drupal.behaviors.SomeUniqueName = {
attach: function (context, settings) {
$('CAT_SELECT').change(function() {
$(this).closest('form').submit();
});
}
};
})(jQuery);
vider le cache, c'est tout;
ps: // si vous voulez soumettre le formulaire avec AJAX, ce Gist peut vous aider