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 é:
Oculte (ou desative) o botão enviar depois que ele foi clicado
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.
hook_form_alter()
- se estiver usando hook_form_FORMID_alter()
, mude para genérico hook_form_alter()
. Se for genérico hook_form_alter()
com if inside, adicione alguns or
nisto if
.
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.
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;
}
});
});
}
};
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.
scripts[] = js/themename-script.js
Agora, em themename-script.js, adicione à seção Drupal.behaviors.themename para se parecer com o seguinte:
Drupal.behaviors.themename = function()
{
$('.node-form').submit(function(){
$('#edit-submit').attr("disabled", "disabled");
$('#edit-preview').attr("disabled", "disabled");
});
}
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.
Drupal.behaviors
estilo de declaração; não funcionará para o Drupal 7. Seria necessário Drupal.behaviors.themename = { attach: function (context, settings) { // ...
. Consulte Gerenciando JavaScript no Drupal 7 para obter mais informações