Pergunta

Se meu usuário clicar mais de uma vez em um botão de envio de um formulário, ele enviará várias solicitações GET/POST (dependendo do formulário Prefs).

Acho que desativar o botão Enviar usando o JS é um pouco problemático, porque se um usuário tentar parar (botão esc/parado), ele não redefine o botão (a menos que você pegue isso e lide com isso usando JS novamente), se o O usuário volta (botão traseiro) da próxima página, o botão Enviar ainda está desativado (pelo menos no Firefox).

Qual é a melhor prática para desativar o envio de vários formulários.

Obrigado!

Foi útil?

Solução

JavaScript funciona bem para mim. Certificando -se de que o (s) botão (s) esteja de volta quando o usuário aborta sua submissão faz parte da usabilidade.

Se você não deseja desativar seus botões usando JavaScript, talvez no servidor você possa capturar mensagens duplicadas em um determinado período de tempo?

Outras dicas

Isso pode não responder à sua pergunta, mas acho que gerar algo Uniq para identificar a solicitação do lado do servidor pode ser uma idéia melhor. A validação do lado do cliente é sempre problemática.

Ligue a desativação ao envio do formulário e, em seguida, é desativado para o carregamento da página (para redefinir quando você atualizar / voltar):

function disableSubmits( domNode, toDisable )
{
    domNode = domNode || document.getElementsByTagName( 'body' )[ 0 ];

    toDisable = !!toDisable;

    for( var i = 0; i < inputs.length; ++i )
    {
        if( 'submit' === inputs[i].getAttribute( 'type' ) )
        {
            inputs[i].disabled = toDisable;
        }
    }
}

var onloadhandler = function( )
{
    var theForm = document.getElementById( 'theForm' );

    theForm.onsubmit = function( ){ disableSubmits( theForm, true ); }

    disableSubmits( theForm, false );
};

var old = window.onload;

window.onload =  'function' === typeof old
                 ? function( ){ old(); onloadhandler(); }
                 : onloadhandler;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top