Drupal ne semble pas empêcher plusieurs soumissions de formulaires, même sur les pages de nœuds. Ce contrôle qualité suggère de le réparer côté serveur.
Comment pourrais-je désactiver le bouton soumettre après avoir cliqué?
D'autres solutions?
Drupal ne semble pas empêcher plusieurs soumissions de formulaires, même sur les pages de nœuds. Ce contrôle qualité suggère de le réparer côté serveur.
Comment pourrais-je désactiver le bouton soumettre après avoir cliqué?
D'autres solutions?
Réponses:
C'est seulement en dev mais le module Hide Submit ferait l'affaire. L'une des fonctionnalités est:
Masquer (ou désactiver) le bouton d'envoi après avoir cliqué
Je viens de l'installer sur un site de développement et cela semble bien fonctionner pour les formulaires d'ajout de nœuds; lorsque vous cliquez sur le bouton Soumettre, il est masqué et remplacé par une image de chargement et un message "Veuillez patienter ...", avant que le formulaire ne soit finalement soumis. Je ne l'ai pas essayé sur d'autres formes cependant.
hook_form_alter()
- s'il l'utilise hook_form_FORMID_alter()
, passez-le en générique hook_form_alter()
. Si elle est générique hook_form_alter()
avec si à l' intérieur, ajouter un peu de or
« s dans ce if
.
Voici la solution pour Drupal 7. Le code est une version simplifiée du module Hide Submit.
Ce code fonctionne bien même avec les boutons "Ajouter plus" et les formulaires AJAX.
Drupal.behaviors.hideSubmitButton = {
attach: function(context) {
$('form.node-form', context).once('hideSubmitButton', function () {
var $form = $(this);
$form.find('input.form-submit').click(function (e) {
var el = $(this);
el.after('<input type="hidden" name="' + el.attr('name') + '" value="' + el.attr('value') + '" />');
return true;
});
$form.submit(function (e) {
if (!e.isPropagationStopped()) {
$('input.form-submit', $(this)).attr('disabled', 'disabled');
return true;
}
});
});
}
};
La façon la plus simple est de faire une solution javascript basée sur un thème pour désactiver le bouton après la soumission du formulaire. Dans le fichier theme.info, placez votre fichier javascript afin qu'il puisse être chargé par l'api du thème.
scripts[] = js/themename-script.js
Maintenant, dans le nom-script.js, ajoutez à la section Drupal.behaviors.themename pour ressembler à ceci:
Drupal.behaviors.themename = function()
{
$('.node-form').submit(function(){
$('#edit-submit').attr("disabled", "disabled");
$('#edit-preview').attr("disabled", "disabled");
});
}
Le flux est donc le suivant:
Je suis sûr que s'il y a un traitement ajax, ce qui précède pourrait être dangereux et la soumission du formulaire ne pourrait jamais être refaite si une erreur est détectée dans la validation form_api alors testez-le et personnalisez-le pour répondre à vos besoins. J'ai désactivé les deux boutons car vous pouviez toujours cliquer sur le bouton d'aperçu alors que le bouton d'envoi était désactivé. Évidemment, votre kilométrage peut varier.
Drupal.behaviors
style de déclaration; cela ne fonctionnera pas pour Drupal 7. Ce devrait être le cas Drupal.behaviors.themename = { attach: function (context, settings) { // ...
. Voir Gestion de JavaScript dans Drupal 7 pour plus d'informations