6
votes

Comment puis-je désactiver un bouton de soumission de formulaire Drupal lorsqu'il est cliqué pour empêcher la double soumission?

sonne comme une simple question. J'ai ajouté un peu de jQuery Magic: xxx pré>

Cependant, une fois que c'est en place, mon formulaire Soumettre le gestionnaire ne s'appelle pas. P>

Ceci est un formulaire personnalisé sur mon propre chemin défini dans Hook_menu: P>

Array
  (
    [op] = Save
    [form_build_id] => form-6e74c87390e3fc48d0bebd2f5193315b
    [form_token] => 33db6e34c0350e33c48861a63a38d45f
    [form_id] => dh_seo_workload_item_form
  )


2 commentaires

J'ai également ajouté une réponse à la question que vous avez liée (je pense) une solution moins hacky.


Est-ce que cela n'est peut-être pas appelé dû au bouton désactivé en cas de clic. Ma solution ci-dessous utilise Settimeout à 1 ms pour contourner cela.


4 Réponses :


1
votes

Je pense que le fait que vous attachez à l'événement de clic du bouton signifie que le bouton est désactivé avant que l'événement de clic ne puisse bouillir au formulaire et provoquer une soumission.

Notre équipe a trouvé que la désactivation du bouton d'envoi crée presque toujours des problèmes pour Internet Explorer. Nous avons fait un petit plugin pour résoudre le problème; Voir le code ici: https://stackoverflow.com/a/4473801/4376


3 commentaires

Merci pour votre solution. Je recommande d'utiliser Bind au lieu de vivre car Live a été obsolète.


@Roger - en fait on () est la version mise à jour. Bind est également obsolète et, contrairement à Live ou sur , travaillé uniquement pour des éléments de la page au moment de l'invocation. Corrigé en conséquence.


Oh je vois. Merci Nathan!



0
votes

Je l'ai réparé cet après-midi de cette façon et a été en mesure d'obtenir les informations de formulaire soumises sans problème:

$("#id_of_button").click(function() {
  var submit = $(this);
  setTimeout(function(){
    submit.attr('disabled','disabled')
  },1);
});


0 commentaires

4
votes

ou vous pouvez le faire, comme une addition à une doublure au niveau de la matrice de formulaire PHP ...

$form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Save'),
  '#attributes' => array(
    'onclick' => 'javascript:var s=this;setTimeout(function(){s.value="Saving...";s.disabled=true;},1);',
  ),
);


0 commentaires

0
votes

Il suffit de masquer votre bouton d'envoi ( Affichage: Aucune ) et montrez un autre bouton déjà désactivé à la place. Je pense que c'est moins hack que le reste des solutions pour ce problème. J'ai généralement 2 boutons sur ma page, une visible et l'autre non, et onClick, il suffit de les changer.

Le problème est dû car les boutons désactivés ne déclenchent pas les post-forts.


0 commentaires