input type = "submit" Vs etiqueta de botón ¿son intercambiables?

233

input type="submit"y la buttonetiqueta son intercambiables? o si hay alguna diferencia, ¿cuándo usar input type="submit"y cuándo button?

Y si no hay diferencia, ¿por qué tenemos 2 etiquetas para el mismo propósito?

Jitendra Vyas
fuente
Evite un día divertido mientras lo usa buttony el valueatributo en alguna versión de IE, inputsolo enviará lo que esperaba, alguna versión de IE no funciona bien con buttons.
Rubens Mariuzzo 02 de
Las respuestas son básicamente las mismas que para input type="button"vs button type=button: stackoverflow.com/questions/469059/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
¿Responde esto a tu pregunta? <botón> vs. <input type = "button" />. ¿Cuál usar?
Leonée

Respuestas:

131

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

Los botones creados con el elemento BUTTON funcionan igual que los botones creados con el elemento INPUT, pero ofrecen mayores posibilidades de representación: el elemento BUTTON puede tener contenido. Por ejemplo, un elemento BUTTON que contiene una imagen funciona como y puede parecerse a un elemento INPUT cuyo tipo se establece en "image", pero el tipo de elemento BUTTON permite contenido.

¡Entonces, para la funcionalidad, solo son intercambiables!

(No lo olvide, type="submit"es el valor predeterminado con button, ¡así que déjelo apagado!)

MatTheCat
fuente
77
Solo tenga cuidado, IE6 envía los valores de todos los botones de la página, lo que dificulta determinar exactamente en qué botón se hizo clic. Explicación: vancelucas.com/blog/ie6-and-multiple-button-submit-elements
Sam
66
Solo para tu información, no tienes que usar el type="submit"botón, ya que el valor predeterminado typees submit.
sincronizar
8
Eso es lo que dice W3C, pero estoy bastante seguro de que he visto casos en los que el typevalor predeterminado era button. Prefiero explicitar cada atributo para evitar cualquier inconsistencia del navegador.
MatTheCat
55
según referencia sí. pero no todos los navegadores se apegan a las especificaciones de referencia, ¿verdad?
EKanadily
2
@chharvey, no el primero puede tener nodos secundarios; es decir, contenido no textual. Supongo que se podría decir que, aparte de la brevedad, no hay razón para que este último exista.
Paul Draper
71

El <input type="button">es solo un botón y no hará nada por sí mismo. El <input type="submit">, cuando dentro de un elemento de formulario, se envía el formulario cuando se hace clic.

Otro botón 'especial' útil es el <input type="reset">que borrará el formulario.

el programador
fuente
55
La pregunta es sobre la etiqueta del botón no <input type = "button">
Caltor
77
La pregunta es sobre <input>y <button>etiquetas. Proporcionó información útil sobre <input>en su respuesta, pero le falta el <button>lado.
Pmpr
43

Use la etiqueta <button> en lugar de <input type = "button" ..> . Es la práctica recomendada en bootstrap 3.

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

"Representación entre navegadores

Como práctica recomendada, recomendamos utilizar el elemento <button> siempre que sea posible para garantizar una representación coincidente entre navegadores.

Entre otras cosas, hay un error de Firefox que nos impide establecer la altura de línea de los botones basados ​​en <input>, lo que hace que no coincidan exactamente con la altura de otros botones en Firefox ".

rolfk
fuente
44
+1 por esto. buttones mucho más explícito y viene con ariacaracterísticas de accesibilidad, y es mucho más fácil de diseñar. También es progresista, ya que es HTML5.
user1429980
37

Aunque ambos elementos ofrecen funcionalmente el mismo resultado *, le recomiendo que use<button> :

  • Mucho más explícito y legible. inputsugiere que el control sea editable o que el usuario pueda editarlo; buttones mucho más explícito en términos del propósito al que sirve
  • Más fácil de diseñar en CSS; como se mencionó anteriormente, FIrefox e IE tienen peculiaridades en las que input[type="submit"]no se muestran correctamente en algunos casos
  • Solicitudes predecibles: IE tiene comportamientos muy distintos cuando los valores se envían en la solicitud POST/ GETal servidor
  • Marcado amigable; Puede anidar elementos, por ejemplo, iconos, dentro del botón.
  • HTML5, con visión de futuro; Como desarrolladores, es nuestra responsabilidad adoptar la nueva especificación una vez que se oficialice. HTML5, a partir de ahora, ha sido oficial durante más de un año, y en muchos casos se ha demostrado que impulsa el SEO .

* Con la excepción de que por defecto no tiene un comportamiento especificado.<button type="button">

En resumen, desaconsejo el uso de<input type="submit" /> .

usuario1429980
fuente
Gracias. Estaba buscando esto, especialmente para el punto semántico HTML5. En 2020, tenemos que pensar más allá de la funcionalidad pura.
pierre_loic
27

<input type='submit' />no admite HTML dentro de él, ya que es una sola etiqueta de cierre automático. <button>, Por el contrario, soporta HTML, imágenes, etc. dentro porque es un par de etiquetas: <button><img src='myimage.gif' /></button>. <button>También es más flexible cuando se trata de estilo CSS.

La desventaja <button>es que no es totalmente compatible con navegadores antiguos. IE6 / 7, por ejemplo, no lo muestra correctamente.

A menos que tenga alguna razón específica, probablemente sea mejor atenerse <input type='submit' />.

Jared Ng
fuente
1
La respuesta fue de hace 2 años. Además, es muy posible especificar un texto de botón alternativo:<input type="submit" value="Log In" />
Jared Ng
2
@nailer Tienes derecho a tu opinión, pero cualquier respuesta inevitablemente hará referencia al estado actual de la tecnología. Tal vez HTML 6 se desaproveche <button>a favor de algo nuevo. ¿Eso significa que no deberíamos mencionar una etiqueta específica en las respuestas, ya que podría cambiar en algún momento en el futuro? Preferiría dejarlo como un ejercicio para el lector para determinar cómo se aplican las respuestas a su situación. Mientras la información sea valiosa para el lector, no veo el problema en incluirla.
Jared Ng
1
En el momento en que se escribió la respuesta, IE6 / 7 ya estaba desactualizado. Un nuevo desarrollador web que lea su publicación, sin verificar sus argumentos de apoyo y darse cuenta de que ya no se aplican, pensaría que hay una buena razón para no usar elementos de "botón".
mikemaccana
2
@nailer No hay una lista universal de navegadores "desactualizados" a la que se adhieran todos. Los diferentes lugares de trabajo tienen diferentes requisitos para los navegadores compatibles. El hecho de que su estándar de "navegadores compatibles" en 2011 no incluyera IE6 / 7 no significa que ese sea el caso en todas partes.
Jared Ng
1
Soy consciente de que no hay una lista universal de navegadores "desactualizados", por lo tanto, no todos mencionan tal cosa. Todo lo que digo es que esto podría estar mejor redactado ya que "IE6 / 7 no admite el botón de visualización correctamente. Si eso es una preocupación, quédese con la entrada" Es decir, sabe que los navegadores cambiarán, explíquelo. Esto evita que StackOverflow se detenga para siempre en las soluciones alternativas de IE6.
mikemaccana
14

Me doy cuenta de que esta es una vieja pregunta, pero encontré esto en mozilla.org y creo que se aplica.

Un botón puede ser de tres tipos: enviar, restablecer o botón. Un clic en un botón de envío envía los datos del formulario a la página web definida por el atributo de acción del elemento.

Un clic en un botón de reinicio restablece todos los widgets de formulario a su valor predeterminado inmediatamente. Desde el punto de vista de UX, esto se considera una mala práctica.

Un clic en un botón no hace ... ¡nada! Eso suena tonto, pero es increíblemente útil crear botones personalizados con JavaScript.

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

Jere.me
fuente
¿Cómo es útil si no hace nada?
Miel
44
Porque puedes conectar controladores al evento click a través de Javascript
fonso
@Honey, por ejemplo, puede codificar a <button type="button">para avanzar un control deslizante / carrusel a la siguiente diapositiva.
chharvey
11

<button>es más nuevo que <input type="submit">, es más semántico, fácil de estilizar y admite HTML dentro de él.

Acaz Souza
fuente
8

Si bien las otras respuestas son geniales y responden la pregunta, hay una cosa a tener en cuenta al usar input type="submit"y button. Con un input type="submit"no se puede usar un pseudo elemento CSS en la entrada, ¡pero se puede usar un botón!

Esta es una razón para usar un buttonelemento sobre una entrada cuando se trata de estilo.

L84
fuente
3

No sé si esto es un error o una característica, pero hay una diferencia muy importante (al menos en algunos casos) que encontré: <input type="submit">crea un par de valores clave en su solicitud y <button type="submit">no lo hace. Probado en Chrome y Safari.

Entonces, cuando tiene varios botones de envío en su formulario y desea saber en cuál se hizo clic, no lo use button, en su input type="submit"lugar , úselo.

Ivan Yarych
fuente
desde mi experiencia es absolutamente al revés, el botón pasa $ _POST ["submit_name"] y la entrada NO. probado en cromo. Firefox envía $ _POST ["submit_name"] siempre.
Gall Annonim
@GallAnnonim tal vez eso depende del tipo de documento. Porque definitivamente uso input type = submit y funciona en Chrome
Ivan Yarych
interesante ... Utilicé <! DOCTYPE html> usando lang "pl" && codificando utf-8 si hace alguna diferencia. cromo es 58.0.3029.96
Gall Annonim
-2

Si está hablando <input type=button>, no enviará automáticamente el formulario

Si está hablando de la <button>etiqueta, es más nueva y no se envía automáticamente en todos los navegadores.

En pocas palabras, si desea que el formulario se envíe al hacer clic en todos los navegadores, use <input type="submit">

DarylChymko
fuente
14
Puede usar <button type="submit">para enviar formularios automáticamente.
jumpnett