Eu tenho um formulário. Fora desse formulário, tenho um botão. Um botão simples, como este:
<button>My Button</button>
No entanto, quando clico, ele envia o formulário. Aqui está o código:
<form id="myform">
<input />
</form>
<button>My Button</button>
Tudo o que este botão deve fazer é algum JavaScript. Mas mesmo quando se parece com o código acima, ele envia o formulário. Quando mudo o botão de marcação para abranger, ele funciona perfeitamente. Mas, infelizmente, ele precisa ser um botão. Existe alguma maneira de impedir que esse botão envie o formulário? Como por exemplo
<button onclick="document.getElementById('myform').doNotSubmit();">My Button</button>
javascript
html
arik
fonte
fonte
button
fortype=submit
, não há formulário a ser enviado quando obutton
elemento estiver fora de qualquer formulário. A menos que uma demonstração real (um exemplo de documento, identificação de um navegador e descrição das observações que mostram que algum formulário seja enviado) possa ser fornecida, essa pergunta deve ser encerrada como não reproduzível. Usartype=button
é uma boa prática, mas isso não torna o problema real.Respostas:
Eu acho que essa é a pequena peculiaridade mais irritante do HTML ... Esse botão precisa ser do tipo "botão" para não enviar.
Atualização 5 de fevereiro de 2019: Conforme o HTML Living Standard (e também a especificação do HTML 5 ):
fonte
to use <button>
<button>
s incorretamente em alguns casos. Além disso,<button>
não é 100% compatível com vários navegadores, pois navegadores diferentes podem enviar valores diferentes para o mesmo<button>
quando usados em um formulário.type
atributo em uma<button>
tag ésubmit
. Quando alterado paratype=button
,<button>
não é fornecido nenhum comportamento padrão. Veja otype
atributo aqui: developer.mozilla.org/pt-BR/docs/Web/HTML/Element/button<button type='submit'>
Isso é muito difícil para mim, haha. De qualquer forma, sua resposta funciona muito bem!return false;
no final do manipulador onclick fará o trabalho. No entanto, é melhor simplesmente adicionartype="button"
ao<button>
- desse modo que ele se comporte corretamente, mesmo sem nenhum JavaScript.fonte
return false;
não funciona em todos os cenários, enquantotype="Button"
funciona. Mesmo com o JavaScript ativado.Dave Markle está correto. No site do W3School :
Em outras palavras, o navegador que você está usando está seguindo as especificações do W3C.
fonte
Por padrão, os botões html enviam um formulário.
Em outras palavras, o tipo de botão é "enviar" por padrão
Para saber mais, consulte as informações da Mozilla Developer Network nos botões: https://developer.mozilla.org/en/docs/Web/HTML/Element/button
fonte
É recomendável não usar a
<Button>
tag. Use a<Input type='Button' onclick='return false;'>
tag. (Usar o "retorno falso" não deve realmente enviar o formulário.)Algum material de referência
fonte
<input type="button" />
, e é suficiente parareturn false;
- não há necessidade de fazer as duas coisas.Por motivos de acessibilidade, não consegui executá-lo com vários
type=submit
botões. A única maneira de trabalhar nativamente com aform
com vários botões, mas SOMENTE é possível enviar o formulário ao pressionar aEnter
tecla, é garantir que apenas um deles sejatype=submit
enquanto outros estão em outro tipo, comotype=button
. Dessa forma, você pode se beneficiar da melhor experiência do usuário ao lidar com um formulário em um navegador em termos de suporte ao teclado.fonte
Outra opção que funcionou para mim foi adicionar onsubmit = "return false;" para a tag do formulário.
Semanticamente, provavelmente não é uma solução tão boa quanto os métodos acima para alterar o tipo de botão, mas parece ser uma opção se você deseja apenas um elemento de formulário que não será enviado.
fonte