input type = "submit" Vs tag tag são intercambiáveis?


233

input type="submit"e buttontag são intercambiáveis? ou se houver alguma diferença, quando usar input type="submit"e quando button?

E se não há diferença, por que temos duas tags para a mesma finalidade?



Evite um dia engraçado enquanto estiver usando buttone o valueatributo em alguma versão do IE inputenviará apenas o que você esperava, alguma versão do IE não funciona bem com buttons.
Rubens Mariuzzo 02/02

As respostas são basicamente as mesmas que para input type="button"vs button type=button: stackoverflow.com/questions/469059/…
Ciro Santilli #: 26614 Sepiro

Respostas:


131

http://www.w3.org/TR/html4/interact/forms.html#h-17.5

Os botões criados com o elemento BUTTON funcionam da mesma forma que os botões criados com o elemento INPUT, mas oferecem mais possibilidades de renderização: o elemento BUTTON pode ter conteúdo. Por exemplo, um elemento BUTTON que contém uma imagem funciona como e pode se parecer com um elemento INPUT cujo tipo está definido como "imagem", mas o tipo de elemento BUTTON permite conteúdo.

Portanto, apenas para funcionalidade, eles são intercambiáveis!

(Não se esqueça, type="submit"é o padrão com button, então deixe-o desligado!)


7
Cuidado, o IE6 envia os valores de todos os botões da página, o que dificulta a determinação exata de qual botão foi clicado. Explicação: vancelucas.com/blog/ie6-and-multiple-button-submit-elements
Sam

6
Apenas para sua informação, você não precisa usar o type="submit"botão, como o padrão typeé submit.
sync

8
Isso é o que o W3C diz, mas tenho certeza que já vi casos em que o typepadrão era button. Prefiro explicitar cada atributo para evitar qualquer inconsistência no navegador.
MatTheCat

5
de acordo com a referência sim. mas nem todos os navegadores atendem às especificações de referência, certo?
EKanadily

2
@ chharvey, não o primeiro pode ter nós filhos; ou seja, conteúdo não textual. Suponho que você poderia dizer que, além da brevidade, não há razão para a existência deste último.
Paul Draper

71

O <input type="button">é apenas um botão e não fará nada por si só. O <input type="submit">, quando estiver dentro de um elemento do formulário, enviará o formulário quando clicado.

Outro botão 'especial' útil é o <input type="reset">que limpará o formulário.


5
A questão é sobre a tag button não <input type = "button">
Caltor

7
A pergunta é sobre <input>e <button>tags. Você forneceu informações úteis sobre a <input>sua resposta, mas ela não tem o <button>lado.
Pmpr 09/03

43

Use a tag <button> em vez de <input type = "button" ..> . É a prática recomendada no bootstrap 3.

http://getbootstrap.com/css/#buttons-tags

"Renderização em vários navegadores

Como prática recomendada, é altamente recomendável usar o elemento <button> sempre que possível para garantir a renderização correspondente no navegador.

Entre outras coisas, há um bug do Firefox que nos impede de definir a altura da linha dos botões baseados em <input>, fazendo com que eles não correspondam exatamente à altura dos outros botões no Firefox ".


4
+1 para isso. buttoné muito mais explícito, acompanha ariarecursos de acessibilidade e é muito mais fácil de estilizar. Também é uma visão de futuro, pois é HTML5.
user1429980

37

Embora ambos os elementos apresentem funcionalmente o mesmo resultado *, recomendo fortemente que você use<button> :

  • Muito mais explícito e legível. inputsugere que o controle é editável ou pode ser editado pelo usuário; buttoné muito mais explícito em termos da finalidade a que serve
  • Mais fácil de estilizar em CSS; Como mencionado acima, o FIrefox e o IE têm peculiaridades nas quais input[type="submit"]não são exibidas corretamente em alguns casos
  • Solicitações previsíveis: o IE tem comportamentos muito elevados quando os valores são enviados no POST/ GETrequest ao servidor
  • Fácil de marcar; você pode aninhar itens, por exemplo, ícones, dentro do botão.
  • HTML5, visão de futuro; como desenvolvedores, é nossa responsabilidade adotar as novas especificações depois que elas forem oficializadas. O HTML5, a partir de agora, é oficial há mais de um ano e, em muitos casos, demonstrou impulsionar o SEO .

* Com exceção do qual, por padrão, não possui comportamento especificado.<button type="button">

Em resumo, eu desencorajo o uso de<input type="submit" /> .


Obrigado. Eu estava procurando por isso, especialmente para o ponto semântico HTML5. Em 2020, temos que pensar além da funcionalidade pura.
pierre_loic 10/06

27

<input type='submit' />não suporta HTML, pois é uma única tag de fechamento automático. <button>, Por outro lado, suporta HTML, imagens, etc. dentro porque é um par de tags: <button><img src='myimage.gif' /></button>. <button>também é mais flexível quando se trata de estilo CSS.

A desvantagem <button>é que não é totalmente suportado por navegadores mais antigos. O IE6 / 7, por exemplo, não o exibe corretamente.

A menos que você tenha algum motivo específico, provavelmente é melhor manter-se <input type='submit' />.


1
A resposta foi de 2 anos atrás. Além disso, é muito possível especificar o texto alternativo do botão:<input type="submit" value="Log In" />
Jared Ng

2
@nailer Você tem todo o direito de ter sua opinião, mas qualquer resposta inevitavelmente fará referência ao estado atual da tecnologia. Talvez o HTML 6 seja preterido <button>em favor de algo novo. Isso significa que não devemos mencionar uma tag específica nas respostas, porque ela pode mudar em algum momento no futuro? Eu preferiria deixar como um exercício para o leitor determinar como as respostas se aplicam à sua situação. Enquanto as informações forem valiosas para o leitor, não vejo problema em incluí-las.
Jared Ng

1
No momento em que a resposta foi escrita, o IE6 / 7 já estava desatualizado. Um novo desenvolvedor da Web que leia sua postagem, sem verificar seus argumentos de suporte e perceber que eles não se aplicam mais, pensaria que há boas razões para não usar elementos de botão.
Mikemaccana

2
@nailer Não existe uma lista universal de navegadores "desatualizados" que seja respeitada por todos. Locais de trabalho diferentes têm requisitos diferentes para navegadores suportados. Só porque o seu padrão de "navegadores suportados" em 2011 não incluiu o IE6 / 7 não significa que é o caso em todos os lugares.
Jared Ng

1
Estou ciente de que não existe uma lista universal de navegadores "desatualizados" - portanto, nem todos mencionam isso. Tudo o que estou dizendo é que isso poderia ser melhor redigido como "O IE6 / 7 não suporta o botão de exibição corretamente. Se isso for um problema, atenha-se à entrada" Ou seja, você sabe que os navegadores mudarão, e dê conta disso. Isso impede que o StackOverflow seja pausado para sempre nas soluções alternativas do IE6.
Mikemaccana

14

Sei que essa é uma pergunta antiga, mas achei no mozilla.org e acho que se aplica.

Um botão pode ser de três tipos: enviar, redefinir ou botão. Um clique no botão enviar envia os dados do formulário para a página da web definida pelo atributo de ação do elemento.

Um clique no botão de redefinição redefine todos os widgets do formulário para o valor padrão imediatamente. Do ponto de vista do UX, isso é considerado uma prática ruim.

Um clique no botão não faz ... nada! Parece bobagem, mas é incrivelmente útil criar botões personalizados com JavaScript.

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Forms/My_first_HTML_form#And_a_<button>_to_finish


Como é útil se não faz nada?
Mel

4
Porque você pode em seguida, ligar manipuladores para o evento clique via Javascript
Fonso

@Mel, por exemplo, você pode codificar a <button type="button">para avançar um controle deslizante / carrossel para o próximo slide.
chharvey

11

<button>é mais recente que <input type="submit">, é mais semântico, fácil de estilizar e suportar HTML dentro dele.


8

Enquanto as outras respostas são ótimas e respondem à pergunta, há uma coisa a considerar ao usar input type="submit"e button. Com um, input type="submit"você não pode usar um pseudo-elemento CSS na entrada, mas pode usar um botão!

Esse é um dos motivos para usar um buttonelemento sobre uma entrada quando se trata de estilo.


3

Não sei se isso é um bug ou um recurso, mas há uma diferença muito importante (pelo menos em alguns casos) que encontrei: <input type="submit">cria um par de valores-chave em sua solicitação e <button type="submit">não. Testado no Chrome e Safari.

Portanto, quando você tiver vários botões de envio em seu formulário e quiser saber qual deles foi clicado - não use button, use input type="submit".


pela minha experiência, o botão passa $ _POST ["submit_name"] e a entrada NÃO. testado em cromo. O Firefox envia $ _POST ["submit_name"] sempre.
Gall Annonim

@GallAnnonim talvez isso dependa do tipo de documento. Porque eu definitivamente usar input type = submeter e ele funciona em Chrome
Ivan Yarych

interessante ... Eu usei <! DOCTYPE html> usando lang "pl" e& codificando utf-8 se isso faz alguma diferença. O cromo é 58.0.3029.96
Gall Annonim

-2

Se você está falando <input type=button>, ele não envia o formulário automaticamente

se você está falando sobre a <button>tag, é mais recente e não é enviado automaticamente em todos os navegadores.

Conclusão: se você deseja enviar o formulário com um clique em todos os navegadores, use <input type="submit">


14
Você pode usar <button type="submit">para enviar formulários automaticamente.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.