Drupal no parece evitar envíos de formularios múltiples, incluso en páginas de nodos. Este control de calidad sugiere arreglarlo en el lado del servidor.
¿Cómo podría deshabilitar el botón Enviar después de hacer clic?
¿Alguna otra solución?
Drupal no parece evitar envíos de formularios múltiples, incluso en páginas de nodos. Este control de calidad sugiere arreglarlo en el lado del servidor.
¿Cómo podría deshabilitar el botón Enviar después de hacer clic?
¿Alguna otra solución?
Respuestas:
Solo está en desarrollo, pero el módulo Hide Submit haría el truco. Una de las características es:
Ocultar (o deshabilitar) el botón Enviar después de hacer clic
Lo acabo de instalar en un sitio de desarrollo y parece funcionar bien para los formularios de agregar nodo; Cuando hace clic en el botón Enviar, se oculta y se reemplaza con una imagen de carga y un mensaje "Espere ...", antes de que se envíe el formulario. Sin embargo, no lo he probado en ninguna otra forma.
hook_form_alter()
: si está usando hook_form_FORMID_alter()
, cámbielo a genérico hook_form_alter()
. Si es genérico hook_form_alter()
con if dentro, agregue algunos or
en esto if
.
Aquí hay una solución para Drupal 7. El código es una versión simplificada del módulo Hide Submit.
Este código funciona bien incluso con los botones "Agregar más" y los formularios 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 forma más fácil es hacer una solución javascript basada en temas para deshabilitar el botón después del envío del formulario. En el archivo theme.info, coloque su archivo javascript para que la api del tema pueda cargarlo.
scripts[] = js/themename-script.js
Ahora, en themename-script.js, agregue a la sección Drupal.behaviors.themename para que tenga el siguiente aspecto:
Drupal.behaviors.themename = function()
{
$('.node-form').submit(function(){
$('#edit-submit').attr("disabled", "disabled");
$('#edit-preview').attr("disabled", "disabled");
});
}
Entonces el flujo es el siguiente:
Estoy seguro de que si hay algún procesamiento ajax, lo anterior podría ser peligroso y el envío del formulario nunca podría volver a realizarse si se detecta un error en la validación form_api, así que pruébelo y personalícelo para satisfacer sus necesidades. Deshabilité ambos botones, ya que aún podía hacer clic en el botón de vista previa mientras el botón de envío estaba deshabilitado. Obviamente su kilometraje puede variar.
Drupal.behaviors
estilo de declaración; no funcionará para Drupal 7. Tendría que serlo Drupal.behaviors.themename = { attach: function (context, settings) { // ...
. Consulte Administración de JavaScript en Drupal 7 para obtener más información