Digamos que tengo:
<form method="get" action="something.php">
<input type="text" name="name" />
</form>
<input type="submit" />
¿Cómo hago para enviar ese formulario con ese botón de envío fuera del formulario? Creo que en HTML5 hay un atributo de acción para el envío, pero no estoy seguro de si eso es completamente entre navegadores y si no está ahí para ¿hacer esto?
Respuestas:
Actualización: en los navegadores modernos puede usar el
form
atributo para hacer esto .Que yo sepa, no puedes hacer esto sin javascript.
Esto es lo que dice la especificación
Esa es mi atrevida
Un
submit
botón se considera un control.http://www.w3.org/TR/html4/interact/forms.html#h-17.2.1
De los comentarios
¿Por qué no colocar el
input
interior del formulario, pero usar CSS para colocarlo en otra parte de la página?fuente
En HTML5, existe el atributo de formulario . Básicamente
fuente
<button type="submit" form="frmFoo" onclick="!this.form&&$('#'+$(this).attr('form')).submit()">
como revelaron los experimentos, this.form es la forma adjunta DomElement, mientras que, de lo contrario, es nula. // edit: jQuery, pero posible también con vainilla<button type="submit" form="frmFoo" onclick="!this.form && document.getElementById('myform').submit()">
Una solución que funciona muy bien para mí, todavía falta aquí. Requiere tener un elemento visualmente oculto
<submit>
o<input type="submit">
dentro del elemento<form>
y un<label>
elemento asociado fuera de él. Se vería así:Ahora este enlace le permite 'hacer clic' en el
<submit>
elemento del formulario haciendo clic en el<label>
elemento.fuente
label
no es un elemento enfocable (AFAIK), por lo que no es intuitivo para un usuario que solo usa el teclado para navegar al 'botón' y luego presiona la barra espaciadora para activar ese botón, por ejemplo. (Me doy cuenta de que puedes presionar en su<enter>
lugar, pero esa no es la única forma en que las personas están acostumbradas a navegar por los formularios con el teclado)label
botón vía tab, puede usar eltabindex
atributo HTML:<label for="submit-form" tabindex="0">Submit</label>
según esta preguntasi puedes usar jQuery puedes usar esto
Por lo tanto, la conclusión es crear un botón como Enviar y colocar el botón de envío real en el formulario (por supuesto, ocultarlo) y enviar el formulario mediante jquery haciendo clic en el botón 'Enviar falso'. Espero eso ayude.
fuente
$('button[form]').click(function (){ var formId = $(this).attr('form'); $('#' + formId).submit(); });
Esto funcionó para mí, tener un botón de envío remoto para un formulario.
fuente
Similar a otra solución aquí, con modificaciones menores:
https://www.w3schools.com/tags/att_form.asp
fuente
Prueba esto:
Aunque sugeriría agregar un
id
al formulario y acceder por eso en lugar dedocument.forms[index]
.fuente
Siempre puedes usar jQuery:
fuente
Aquí hay una solución bastante sólida que incorpora las mejores ideas hasta ahora, así como también incluye mi solución a un problema destacado con Offerein. No se usa javascript.
Si le importa la compatibilidad con IE (e incluso Edge 13), no puede usar el
form="your-form"
atributo .Use una entrada de envío estándar con display none y agregue una etiqueta fuera del formulario:
Tenga en cuenta el uso de
display: none;
. Esto es intencional El uso de la.hidden
clase bootstrap entra en conflicto con el de jQuery.show()
y.hide()
, y desde entonces ha quedado en desuso en Bootstrap 4.Ahora simplemente agregue una etiqueta para su envío, (diseñado para bootstrap):
A diferencia de otras soluciones, también estoy usando tabindex , establecido en 0, lo que significa que ahora somos compatibles con la tabulación del teclado. Agregar el
role="button"
atributo le da el estilo CSScursor: pointer
. Et voila. ( Ver este violín ).fuente
Enter
no tiene ningún efecto. Por lo tanto, poder tabularlo parece un poco inútil. ¿Hay alguna manera de hacer esto sin usar JavaScript?<input... />
sintaxis de cierre automático descuidada e inválida , que casi todo el mundo usa de manera descarada e incorrecta aquí (también), en la etiqueta nula de cierre correcta! :) Felicitaciones!¡Esto funciona perfectamente! ;)
Esto se puede hacer usando Ajax y con lo que yo llamo: "un elemento espejo de forma". En lugar de enviar un formulario con un elemento externo, puede crear un formulario falso. El formulario anterior no es necesario.
El código ajax sería como:
Esto es muy útil si desea enviar algunos datos dentro de otro formulario sin enviar el formulario principal.
Este código probablemente se puede adaptar / optimizar según la necesidad. ¡Funciona perfectamente! ;) También funciona si desea un cuadro de opción de selección como este:
Espero que haya ayudado a alguien así me ayudó. ;)
fuente
Quizás esto podría funcionar, pero no sé si es HTML válido.
fuente
Tuve un problema en el que intentaba ocultar el formulario de un elemento de celda de tabla, pero aún mostraba el botón de envío de formularios. El problema era que el elemento de formulario todavía ocupaba un espacio en blanco adicional, haciendo que el formato de la celda de mi tabla se viera extraño. La pantalla: ninguno y visibilidad: los atributos ocultos no funcionaron porque también ocultaría el botón de envío, ya que estaba contenido en el formulario que estaba tratando de ocultar. La respuesta simple fue establecer la altura de los formularios en casi nada usando CSS
Entonces,
CSS -
trabajó para mi.
fuente
Lo utilicé de esta manera, y me gustó, valida el formulario antes de enviarlo y también es compatible con safari / google. no jquery nn
fuente