O Drupal parece não impedir o envio de vários formulários, mesmo nas páginas dos nós. Esse controle de qualidade sugere corrigi-lo no lado do servidor.
Como posso desativar o botão enviar depois de clicar?
Alguma outra solução?
O Drupal parece não impedir o envio de vários formulários, mesmo nas páginas dos nós. Esse controle de qualidade sugere corrigi-lo no lado do servidor.
Como posso desativar o botão enviar depois de clicar?
Alguma outra solução?
Respostas:
É apenas no dev, mas o módulo Ocultar envio faria o truque. Um dos recursos é:
Acabei de instalá-lo em um site de desenvolvimento e parece funcionar bem para adicionar formulários de nó; quando você clica no botão enviar, ele é oculto e substituído por uma imagem carregada e uma mensagem 'Aguarde ...', antes que o formulário seja finalmente enviado. Eu ainda não tentei de nenhuma outra forma.
fonte
hook_form_alter()
- se estiver usandohook_form_FORMID_alter()
, mude para genéricohook_form_alter()
. Se for genéricohook_form_alter()
com if inside, adicione algunsor
nistoif
.Aqui está a solução para o Drupal 7. O código é uma versão simplificada do módulo Hide Submit.
Esse código funciona bem mesmo com os botões "Adicionar mais" e os formulários AJAX.
fonte
A maneira mais fácil é fazer uma solução javascript baseada em tema para desativar o botão após o envio do formulário. No arquivo theme.info, coloque seu arquivo javascript para que ele possa ser carregado pela API do tema.
Agora, em themename-script.js, adicione à seção Drupal.behaviors.themename para se parecer com o seguinte:
Portanto, o fluxo é o seguinte:
Tenho certeza de que, se houver algum processamento ajax, o acima exposto pode ser perigoso e o envio do formulário nunca poderá ser feito novamente se um erro for detectado na validação do form_api, teste-o e personalize-o para atender às suas necessidades. Desativei os dois botões, pois você ainda pode clicar no botão de visualização enquanto o botão Enviar estiver desabilitado. Obviamente sua milhagem pode variar.
fonte
Drupal.behaviors
estilo de declaração; não funcionará para o Drupal 7. Seria necessárioDrupal.behaviors.themename = { attach: function (context, settings) { // ...
. Consulte Gerenciando JavaScript no Drupal 7 para obter mais informações