Contenido

¿Por que lo llamamos input cuando deberíamos llamarlo button ?

16 May

+ 15

Hoy leyendo un artículo relacionado al elemento <button />;, me ha asaltado una duda (si, otra más), ¿por que usamos el elemento <input /> para submitar formularios y no usamos el elemento <button />?

Al parecer en la nueva especificación, aun por terminar, está incluido para la HTML 5, aunque falte su especificación y además junto al elemento <input />. Si leemos la especificación del HTML 4 nos dice que el elmento <button /> está permitido dentro de elementos <a /><form /> y <fieldset /> al igual que elementos <input />.

<input /> 

<input /> es un elemento de formulario que permite definir su tipo entre una considerable cantidad de posibilidades (text, password, checkbox, radio, file, hidden, ..) y las que me llevan a mi duda… submit, reset, button e … image (¿que pasa los imagenes?).

Este elemento está pensado para que el usuario «introduzca» datos, ya sea mediante letras o cualquier otro método, pero siempre haciendo referencia a datos que introduce el usuario. Pero al parecer el uso lleva a los vicios y por algún motivo que desconozco, se le otorgan propiedades no relacionadas con la introducción de datos por parte del usuario.

<form id="formulario" action="accion" method="post">
<fieldset>
	<label for="nombre">
		Nombre: <input type="text" id="nombre" name="nombre" value="" />
	</label>
</fieldset>
</form> 

<button /> 

Por otro lado tenemos el elemento <button />, que es uno de los elementos desconocidos, debido a que por … ese motivo desconocido, la gente usa <input /> en lugar de button. Pero si leemos la especificación vemos que el elemento <button /> tambien permite convertirse en una serie de elementos diferentes dependiendo del type que definamos (submit,reset, button).

Si tenemos dos elemento que pueden submitar un formulario, ¿cual debemos usar?. Si seguimos la perspectiva de la evolución de otras etiquetas vemos que tienden a convertirse en etiquetas con etiqueta de cierre, de tal forma que permite que el desarrollador integre un contenido adicional al elemento, ya sea como texto alternativo en el caso de las imagenes como para mejorar el aspecto de nuestros botones.

<BUTTON name="enviar" value="enviar" type="submit">
    Enviar <IMG src="/iconos/ahivaeso.gif" alt="¡Ahí va eso!" />
</BUTTON>
<BUTTON name="reiniciar" type="reset">
    Reinicializar <IMG src="/iconos/ayno.gif" alt="¡Ay, no!" />
</BUTTON>

Viendo estos ejemplos parece más correcto usar el elmento <button /> como elemento que submite nuestro formularios. ¿no creeis? ¿no es más semántico usar <button /> en lugar de <input />? ¿Alguna idea de por que se usa <input />?

No quiero decir que usar <input /> sea incorrecto, pero viendo esto, da la sensación de que no es lo más correcto 😀

Y lo más curioso,…

<BUTTON type="button" name="button">
    Me llamo button.
</BUTTON>

Valgame la redundacia!! 😀

 

  • Estuvo bueno este post, me interesa mucho lo que se pueda hacer con la etiqueta button, la probare a ver que tal, saludos y gracias 😀

  • Interesante, pero hay algo que me causo gracia y no viene mucho a cuento, pero aqui lo dejo.
    El titulo de la entrada pregunta porque no llamar a las cosas por su nombre, es decir, button al input de ese tipo. Pero luego, ya en el primer parrafo usas el verbo (?) «submitar». Ya que vamos a llamar cada cosa por su nombre, porque no usas el termino del web 1.0, vamos, el famoso «enviar»?. 🙂

  • Es interesante como nunca me había puesto a pensar en esto. Tienes toda la razón, y supongo que la razón es que la tag <button> aparecio solo hasta el HTML4.0; antes se usaba <input type=»submit»> y pues, vos sabes… el hábito de la (mala) costumbre.

    De ahora en adelante, a tenerlo en cuenta y no caer en un error de semántica tan obvio.

  • Yo lo utilizo desde que descubrí que Safari (y Camino, etc.) no reemplaza el button con un botoncito tipo aqua, cosa que sí que hace con los input del tipo submit 😉

  • Creo que la razón por la que se usa en lugar de es porque usando button, si envías el formulario envías también el valor de button, mientras que utilizando esto no sucede.

    Enviando con button tendríamos algo como:
    test.html?nombre=martinpulido&button=Me+llamo+Button

  • Como bien apuntas, la primera razón por la que no se usa button es el puro desconocimiento.

    Pero aún conociendo el elemento, hay problemas. Cierto navegador (llamémosle IE6 o incluso IE7) no solo se pasa por el forro las especificaciones CSS. También lo hace con la espec de HTML.

    Me explico: cuando se envía un formulario, el navegador debe distinguir entre controles «succesfull» (exitosos) y controles «unsuccessfull» (no exitosos). Los controles con éxito enviarán al servidor sus pares nombre/valor. El resto (por ejemplo, un checkbox no marcado) no envían sus pares.

    Esto permite que un mismo formulario incluya varios controles de tipo submit, es decir input con tipo submit o button con tipo submit (cabe apuntar que el tipo submit se usa por defecto en elementos button cuando no se ha especificado el atributo type.

    Así, en un formulario con dos input de tipo submit, solo se envía el par nombre/valor del botón que hemos pulsado para enviar el formulario. Y lo mismo debería suceder, según la especificación, con los elementos button.

    Pero una cosa es la especificación y otra la realidad. IE6 (y 7) envía siempre los pares nombre/valor para elementos button, haciéndolos, efectivamente, inusables.

    Salud.

  • Yo uso button desde que me enteré que existía mientras buscaba la forma de personalizar los botones de los formularios.

    Descubrí esta etiqueta y dejé de lado los input para generar botones. Aparte es mucho más personalizable (vía CSS), flexible y obviamente semántico.

  • Pues aquí nada más apoyando al movimiento «Rumbo a los 10 mil comments de Andrés Nieto», espero atinarle al 10 mil, a ver si me gano algo, aunque sea una playerita geek de anieto2k. En fin, encontré este artículo muy bueno que complementa perfecto lo que el buen andrés nos hizo favor de escribir.

    http://particletree.com/features/rediscovering-the-button-element/

  • Conozco esa etiqueta desde hace algún tiempo pero no me gusta utilizarla porque no es compatible con algunas versiones de Pocket Internet Explorer, y bueno, siendo mi objetivo la web móvil para mi es muy importante(Es como que no funcionara en IE6 y anteriores).

  • Como ya han comentado arriba, no se usa el button porque no funciona bien en IE.

    Pueden ver la explicación aquí.
    http://blog.scriptia.net/al-margen/2007/05/internet-explorer-y-el-elemento-button.html

  • #10 ¿Y por que se usa position:fixed?

    Está claro que IE es un problema, pero no un motivo por el que se tengan que hacer las cosas «mal».

  • Excelente informacion, precisamente me estaba arrancando los pelos de la cabeza con el input type=button, cuando en lugar de un texto quería poner una imagen, funciono pero no se miraba muy bien, entonces veo de la existencia del tag button y me ha quedado de maravilla, tanto que hasta felicitaciones me salieron con mis jefes por el resultado. Muchas gracias.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.