Desativar envio automático de formulário ao clicar no botão

180

Eu tenho um formulário HTML onde eu uso vários botões. O problema é que, não importa em qual botão eu clico, o formulário será enviado, mesmo que o botão não seja do tipo "enviar". por exemplo, botões como:<button>Click to do something</button> resultam no envio do formulário.

É muito doloroso fazer uma e.preventDefault() para cada um desses botões.

Eu uso jQuery e jQuery UI e o site está em HTML5.

Existe uma maneira de desativar esse comportamento automático?

Paris
fonte

Respostas:

460

Botões como <button>Click to do something</button> são botões de envio.

Defina type="button"para mudar isso. type="submit"é o padrão (conforme especificado pela recomendação HTML ).

Quentin
fonte
24
perdi um dia de sono em vão consertando meu código porque não conhecia essa especificação simples!
palerdot
4
Ecoando a noção de palerdot, feliz por encontrar essa nota depois de uma rápida pesquisa no Google e não ter matado horas. Muito sei, muito obrigado.
brooklynsweb
2
@ NiketJoshi - Essa afirmação não parece ter nada a ver com a pergunta que esta responde. Se você tiver uma nova pergunta, faça uma, mas certifique-se de fornecer uma declaração clara do problema e um exemplo reproduzível mínimo .
Quentin
19

Você pode tentar usar return false (return false substitui o comportamento padrão em todos os elementos DOM) assim:

myform.onsubmit = function ()
{ 
  // do what you want
  return false
}

e envie seu formulário usando myform.submit ()

ou alternativamente :

mybutton.onclick = function () 
{
   // do what you want
   return false
}

Além disso, se você usar type="button"o formulário, não será enviado.

Boris D. Teoharov
fonte
8

<button>Na verdade, são botões de envio, eles não têm outra funcionalidade principal. Você terá que definir o tipo para botão.
Mas se você vincular seu manipulador de eventos como abaixo, segmentará todos os botões e não precisará fazê-lo manualmente para cada botão!

$('form button').on("click",function(e){
    e.preventDefault();
});
mas-designs
fonte
Está e.preventDefault(); .
hlcs 10/09/17
0

se você deseja adicionar diretamente à entrada como atributo, use este

 onclick="return false;" 

<input id = "btnPlay" type="button" onclick="return false;" value="play" /> 

isso impedirá o comportamento de envio de formulário

bh_earth0
fonte
0

outro:

if(this.checkValidity() == false) {

                $(this).addClass('was-validated');
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();

                return false;
}
Hello Hack
fonte