Tengo un formulario con 2 botones
<a href="index.html"><button>Cancel changes</button></a>
<button type="submit">Submit</button>
También uso el botón de jQuery UI en ellos, simplemente así
$('button').button();
Sin embargo, el primer botón también envía el formulario. Pensé que si no tuviera el type="submit"
, no lo tendría.
Obviamente podría hacer esto
$('button[type!=submit]').click(function(event) { event.stopPropagation(); });
Pero, ¿hay alguna forma de evitar que el botón Atrás envíe el formulario sin la intervención de JavaScript?
Para ser honesto, usé un botón solo para poder diseñarlo con jQuery UI. Intenté llamar button()
al enlace y no funcionó como se esperaba (¡parecía bastante feo!).
<button type="button">
para el que no envía el formulario y<input type="submit">
para el otro. Entonces$('#formID').submit(function(e){});
Respuestas:
El valor predeterminado para el
type
atributo debutton
elementos es "enviar". Configúrelotype="button"
para producir un botón que no envíe el formulario.En palabras del estándar HTML : "No hace nada".
fuente
El
button
elemento tiene un tipo predeterminado desubmit
.Puede hacer que no haga nada estableciendo un tipo de
button
:fuente
Solo usa un buen HTML antiguo:
Envuélvalo como tema de un enlace, si así lo desea:
O si decide que desea que JavaScript proporcione alguna otra funcionalidad:
fuente
<input type="button" />
Button
es un contenedor en HTML. Eso le permite colocar cosas como imágenes o tablas (no estoy seguro de por qué haría esto, pero podría), etc., mientras queinput
no es compatible con eso. Hay una diferencia entre los dos, y cada uno tiene su caso de uso apropiado.fuente
Sinceramente, me gustan las otras respuestas. Fácil y sin necesidad de entrar en JS. Pero noté que estabas preguntando por jQuery. Entonces, en aras de la integridad, en jQuery si devuelve false con el controlador .click (), negará la acción predeterminada del widget.
Ver aquí para un ejemplo (y más cosas, también). Aquí está la documentación también .
en pocas palabras, con su código de muestra, haga esto:
Como beneficio adicional, con esto, puede deshacerse de la etiqueta de anclaje y simplemente usar el botón.
fuente
e.preventDefault()
no hace nada para detener el envío (donde comienzafunction(e)
).Sin establecer el
type
atributo, también podría regresarfalse
de suOnClick
controlador y declarar elonclick
atributo comoonclick="return onBtnClick(event)"
.fuente
Sí, puede hacer que un botón no envíe un formulario agregando un atributo de tipo de botón de valor:
<button type="button"><button>
fuente
fuente