Eu tenho um formulário que, quando enviado, preciso fazer alguns processamentos adicionais antes de enviar o formulário. Posso evitar o comportamento de envio de formulário padrão, depois faço meu processamento adicional (basicamente chamando a API do Google Maps e adicionando alguns campos ocultos ao formulário) - e então preciso enviar o formulário.
Existe uma maneira de "evitar o padrão" e, algum ponto depois, "continuar o padrão?"
javascript
jquery
StackOverflowNewbie
fonte
fonte
Respostas:
Usar
jQuery.one()
O uso de
one
prevenir também loop infinito porque estesubmit
evento personalizado é detectado após o primeiro envio.fonte
Quando você vincula o
.submit()
evento ao formulário e faz as coisas que deseja antes de retornar (verdadeiro), essas coisas acontecem antes do envio real.Por exemplo:
Exemplo simples
Outro exemplo em jquery.com: http://api.jquery.com/submit/#entry-examples
fonte
Eu apenas faria:
Ligue
preventDefault
primeiro e use asubmit()
função depois, se precisar apenas enviar o formuláriofonte
Usando desta forma, você fará um loop infinito em seu JS. para fazer uma maneira melhor, você pode usar o seguinte
Espero que ajude! Obrigado!
fonte
Esta é, IMHO, a solução mais genérica e robusta (se suas ações forem acionadas pelo usuário, por exemplo, 'o usuário clica em um botão'):
Como exemplo, observe esta solução elegante para adicionar "Tem certeza?" pop-up para qualquer botão apenas decorando um botão com um atributo. Continuaremos condicionalmente com o comportamento padrão se o usuário não cancelar.
1. Vamos adicionar a cada botão que desejamos um pop-up "tem certeza" um texto de aviso:
2. Anexe manipuladores a TODOS esses botões:
É isso aí.
fonte
fonte
Com
jQuery
e uma pequena variação da resposta de @Joepreludian acima:Pontos importantes a serem lembrados:
.one(...)
em vez de.on(...) or .submit(...)
named
função em vez de,anonymous function
pois iremos referenciá-la dentro docallback
.Você pode alterar o valor da
allIsWell
variável no snippet abaixo paratrue
oufalse
para testar a funcionalidade:Boa sorte...
fonte
Em uma forma de Javascript puro, você pode enviar o formulário após evitar o padrão.
Isso ocorre porque
HTMLFormElement.submit()
nunca chama oonSubmit()
. Portanto, estamos contando com essa estranheza de especificação para enviar o formulário como se ele não tivesse um manipulador onsubmit personalizado aqui.Veja este violino para uma solicitação síncrona.
Esperar que uma solicitação assíncrona termine é tão fácil:
Você pode verificar meu violino para obter um exemplo de solicitação assíncrona.
E se você está disposto a cumprir promessas:
E aqui está o pedido .
fonte
Você pode usar o
e.preventDefault()
qual interromperá a operação atual.do que você pode fazer
$("#form").submit();
fonte
"Injeção de validação sem loop de envio":
Só quero verificar o reCaptcha e outras coisas antes da validação do HTML5, então fiz algo assim (a função de validação retorna verdadeiro ou falso):
fonte