web-dev-qa-db-fra.com

Soumettre le formulaire lorsque la valeur du champ a changé

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?

5
Tanvir Ahmad

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é.

6
Tanvir Ahmad

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:

  • Créer un fichier JS dans le répertoire des thèmes
  • Ouvrez le fichier MYTHEME.info et ajoutez scripts[] = JSFILENAME.js
  • Ouvrez le fichier JS et mettez-le quelque chose comme ceci:

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

2
xurshid29