2010-05-13 24 views
268

Tengo un formulario. Fuera de ese formulario, tengo un botón. Un botón simple, como este:Botón HTML para NO enviar formulario

<button>My Button</button> 

Sin embargo, cuando hago clic en él, envía el formulario. Aquí está el código:

<form id="myform"> 
    <input /> 
</form> 
<button>My Button</button> 

Todo lo que este botón debe hacer es un poco de JavaScript. Pero incluso cuando se ve como en el código anterior, envía el formulario. Cuando cambio el botón de etiqueta para abarcar, funciona perfectamente. Pero desafortunadamente, tiene que ser un botón. ¿Hay alguna forma de bloquear ese botón para que no envíe el formulario? Como e. gramo.

+1

Este problema no es reproducible en los navegadores modernos, y el problema puede haber sido originado originalmente por un malentendido. Si bien el valor predeterminado para 'button' es' type = submit', no hay ningún formulario que enviar cuando el elemento 'button' esté fuera de cualquier formulario. A menos que se pueda proporcionar una demostración real (un documento de muestra, identificación de un navegador y una descripción de las observaciones que demuestre que se ha enviado algún formulario), esta pregunta debe cerrarse como no reproducible. Usar 'type = button' es una buena práctica, pero esto no hace que el problema sea real. –

Respuesta

656

Creo que esta es la pequeña peculiaridad más molesta de HTML ... Ese botón debe ser de tipo "botón" para no enviar.

<button type="button">My Button</button> 
+8

@Powerslave cualquier razón para no 'usar

+3

@SandipPingle No hay ninguna razón para usarlo, a menos que necesite un tipo de estilo realmente complejo. Además, IE6 e IE7 (afortunadamente eliminados) manejan '

+0

Esto no funciona para mí en la vista MVC5. – Chazt3n

30

return false; al final del controlador onclick hará el trabajo. Sin embargo, es mejor simplemente agregar type="button" al <button> - de esa manera se comporta correctamente incluso sin JavaScript.

+0

Supongo que esta respuesta solo funciona cuando javascript está habilitado. – Konerak

+0

Los botones que no envían formularios solo son útiles con JavaScript activado de todos modos ... Acepto que type = "button" es más limpio. – ThiefMaster

+2

'return false;' no funciona en todos los escenarios, mientras que 'type =" Button "' sí. Incluso con JavaScript activado. – brejoc

1

Se recomienda no utilizar la etiqueta <Button>. Use la etiqueta <Input type='Button' onclick='return false;'> en su lugar. (El uso del "return false" debe de hecho no envía el formulario.)

Algunos reference material

+2

Basta con usar '', y es suficiente para 'return false;' - no hay necesidad de hacer ambas cosas. – Tom

+0

No estoy de acuerdo con que se recomiende no usar la etiqueta del botón. Si no lo usa, pierde algunas características de accesibilidad que obtendría automáticamente con la etiqueta del botón. Yo diría que la etiqueta del botón en realidad se recomienda para los elementos que actúan como botones. – CookieMonster

11

de Dave Markle es correcta. De W3School's website:

Especifique siempre el tipo de atributo para el botón. El tipo predeterminado para Internet Explorer es "botón", mientras que en otros navegadores (y en la especificación W3C ) es "enviar".

En otras palabras, el navegador que está utilizando sigue las especificaciones del W3C.

8

De forma predeterminada, los botones html envían un formulario.

Esto es debido al hecho de que incluso los botones situados fuera de una forma actúan como peticionarios (véase el sitio web W3Schools: http://www.w3schools.com/tags/att_button_form.asp)

En otras palabras, el tipo de botón es "submit" por defecto

<button type="submit">Button Text</button> 

lo tanto una manera fácil de evitar esto es usar el botón tipo.

<button type="button">Button Text</button> 

Otras opciones incluyen volviendo falsa al final de la onclick o cualquier otro controlador para cuando el botón se hace clic, o para el uso de un> etiqueta < entrada en lugar

Para obtener más información, consulte la información de Mozilla Developer Network en los botones: https://developer.mozilla.org/en/docs/Web/HTML/Element/button

0

Para accesibilidad r eason, no pude llevarlo a cabo con múltiples botones type=submit. La única forma de trabajar de forma nativa con form con varios botones pero SOLO puede enviar el formulario al presionar la tecla Enter para asegurarse de que solo uno de ellos sea de type=submit, mientras que otros estén en otro tipo, como type=button. De esta manera, puede beneficiarse de la mejor experiencia de usuario al tratar con un formulario en un navegador en términos de compatibilidad con el teclado.

Cuestiones relacionadas