2012-03-28 19 views
6

Esta es una pregunta muy rudimentaria, pero estoy seguro de que alguien sabe por qué. En HTML, cuando hago un elemento de botón solo, y no lo doy y onclick y no jQuery .click(), el botón simplemente no hará nada. Perfecto. Pero cuando hago esto y solo el botón dentro de un elemento <form>, ¿intenta enviar datos GET de todos los elementos del formulario a la dirección raíz de mi sitio web? Por qué esta haciendo eso? No lo hice un botón de enviar o incluso definir un method o action en esa forma ??HTML ¿Por qué los botones en los formularios envían datos?

Gracias por la información con antelación!

** ** EDITAR

Esto es lo que hice para solucionar el problema. Para los botones dentro del <form>, utilice:

<button type="button"></button> 

Y no va a hacer nada por defecto.

+0

Me gustaría saber esto también. Personalmente, creo que un botón debería ser simplemente un botón, y un elemento 'input [type = submit]' debería enviar el formulario ... –

+0

Es una función * by-desgin *. –

+0

No estoy seguro de entender la pregunta.Los botones son un mecanismo para hacer que las cosas sucedan. Entonces, ¿qué sentido tiene un botón que no hace nada? Y si no quiere ninguna funcionalidad de formulario, ¿por qué usar un ' en absoluto? Por cierto, 'method' es opcional y el valor predeterminado es' GET'; 'location' no es un atributo. –

Respuesta

9

Como se puede ver en la entrada correspondiente MDN, el valor predeterminado para la propiedad type de un elemento de botón es submit. Por lo tanto, si lo omite o no lo cambia a button o reset, se iniciará el comportamiento predeterminado y se enviará el formulario.

<form action=""> 
    <button type="button">Nothing will happen</button> 
    <button>Form gets submitted</button> 
</form> 
+0

Sabía que se envía, pero no por qué. Gracias por el enlace. – kontur

+0

Supongo que no hay por qué, probablemente proviene de intentar que sea más fácil codificar en el día ... tal vez. –

+0

@jeffery_the_wind Creo que el uso previsto en los primeros días era simplemente enviar formularios. En esos días no había necesidad de una propiedad adicional de "tipo". Más tarde surgió esta necesidad, pero para preservar la compatibilidad con versiones anteriores, el tipo predeterminado seguía siendo 'submit'. Solo mis pensamientos, no hay referencias sobre esto. – Sirko

0

Fue diseñado de esta manera porque a veces necesita saber QUÉ botón se presionó en el lado del servidor. Si desea la funcionalidad del botón sin un botón, use una etiqueta A con estilo.

0

Los botones se tratan como controles de envío en formularios, no estoy seguro de por qué.

La razón por la que se publica en su raíz es porque no especificó action y, por lo tanto, se utiliza el valor predeterminado.

La razón por la que utilizó GET es porque es la predeterminada method.

Para evitar que suceda, agregue return false; al final de su botón onclick.

4

no hice que un botón de envío

<button> elementos tienen a type attribute. The default value is submit. Establezca type="button" si no desea que envíe un formulario.

o incluso definir un método

method defecto a GET

o ubicación en que forma ??

action se establece de manera predeterminada en el URI actual.

Cuestiones relacionadas