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:
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.
fuente
hook_form_alter()
: si está usandohook_form_FORMID_alter()
, cámbielo a genéricohook_form_alter()
. Si es genéricohook_form_alter()
con if dentro, agregue algunosor
en estoif
.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.
fuente
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.
Ahora, en themename-script.js, agregue a la sección Drupal.behaviors.themename para que tenga el siguiente aspecto:
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.
fuente
Drupal.behaviors
estilo de declaración; no funcionará para Drupal 7. Tendría que serloDrupal.behaviors.themename = { attach: function (context, settings) { // ...
. Consulte Administración de JavaScript en Drupal 7 para obtener más información