Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Submit Form sem refresh e sem preventDefault()

Olá! Na verdade minha dúvida é se é possível fazer o submit de um form e prevenir a página de ser recarregada sem usar o preventDefault().

Ou usar o preventDefault() mas sem remover a validação padrão do browser (estilo de campos necessários, estilo de campos invalidos etc.) incluindo os pop-ups padrão de validação que aparecem.

Sou novo em Javascript, mas pesquisei bastante e não achei nenhuma solução que mantém esses padrões, apenas usando o preventdefault() ou o objeto AJAX XMLHttpRequest() que, apesar de não conhecer AJAX ainda, acredito que acaba removendo os estilos padrões assim como outra solução que encontrei adicionando a propriedade HTML no botão com return false: <onclick = myFunction();return false;>

5 respostas

Fala ai Luiz, tudo bem? Isso é possível sim, por mais que você faça o preventDefault, o JavaScript só vai chamar seu listener quando o formulário for válido.

Ou seja, as validações padrões do HTML5 serão chamadas primeiro do que a função listener do form.

Espero ter ajudado.

Consegue me ajudar com um exemplo de codigo? Eu fiz algumas tentativas, mas nao está da nao certo para mim Como que eu faria isso?

solução!

Fala Luiz, você pode criar um formulário com HTML5:

<form id="some-form">
    <input required>
    <input required pattern="[a-z]">
    <button>Save</button>
</form>

E depois adicionar o listener via JS no form:

const form = document.getElementById('some-form')
form.addEventListener('submit', e => {
    e.preventDefault()
    console.log('Deu certo')
})

Se você tentar submeter sem preencher os campos, o próprio HTML não vai deixar, e se no segundo campo você adicionar uma letra maiuscula, vai dar erro também.

Espero ter ajudado.

Obrigado! 😅

Eu estava adicionando o listener no button, achei que aceitava o submit. Trocando o button pelo form funcionou perfeitamente!

Resolvido! 👍

Magina Luiz, sempre que precisar não deixe de criar suas dúvidas,

Abraços e bons estudos.