Supongamos que crea un asistente en un formulario HTML. Un botón retrocede y el otro avanza. Como el botón Atrás aparece primero en el marcado cuando presiona Enter, usará ese botón para enviar el formulario.
Ejemplo:
<form>
<!-- Put your cursor in this field and press Enter -->
<input type="text" name="field1" />
<!-- This is the button that will submit -->
<input type="submit" name="prev" value="Previous Page" />
<!-- But this is the button that I WANT to submit -->
<input type="submit" name="next" value="Next Page" />
</form>
Me gustaría decidir qué botón se utiliza para enviar el formulario cuando un usuario presiona Enter. De esa manera, cuando presiona Enterel asistente se moverá a la página siguiente, no a la anterior. ¿Tienes que usar tabindex
para hacer esto?
fuente
Cambie el tipo de botón anterior en un botón como este:
Ahora el botón Siguiente sería el predeterminado, además de que también podría agregarle el
default
atributo para que su navegador lo resalte así:fuente
default
atributo estás hablando? No hay un atributo "predeterminado", que sería válido: w3.org/html/wg/drafts/html/master/… (no en HTML5, HTML 4.01 Transitional / Strict, XHTML 1.0 Strict). Y no veo por qué sería mejor cambiar el tipo de entrada desubmit
abutton
. Puede tener múltiples elementos de entrada de tipo de envío en un formulario sin ningún problema. Realmente no entiendo por qué esta respuesta es tan votada.default
atributo es un atributo Global; atributo enumerado ... que está relacionado con los estados de enumeración: w3.org/html/wg/drafts/html/master/… . aparte de ese punto ... el aspecto del botón de esta respuesta no es una respuesta ... es una ' sugerencia condicional ' o una consulta ( pregunta en sí misma ).type="button"
no envía el formulario,type="submit"
sí, pero cambiar el tipo de estos botones definitivamente no es una solución, porque estos botones deberían comportarse básicamente de la misma manera: la pregunta del OP fue cómo hacer que el botón "Siguiente" predeterminado para presionar la tecla Enter. Y hay una posible solución en la respuesta aceptada.default
atributo válido para lasinput
etiquetas (como dije anteriormente) en HTML, y los navegadores (populares) NO resaltarán el botón que tiene este atributo, lo que significa que no hay una implementación no estándar de este atributo, por lo que todavía no lo sé de qué estaba hablando @Wally Lawless y por qué esta respuesta está tan sobrevalorada. Solo hay undefault
atributo válido introducido en HTML5, PERO solo para la<track>
etiqueta: developer.mozilla.org/en-US/docs/Web/HTML/Element/trackDé a sus botones de envío el mismo nombre de esta manera:
Cuando el usuario presiona Entery la solicitud va al servidor, puede verificar el valor
submitButton
en su código del lado del servidor que contiene una colección dename/value
pares de formularios . Por ejemplo, en ASP Classic :Referencia: uso de varios botones de envío en un solo formulario
fuente
Si el hecho de que el primer botón se use de manera predeterminada es consistente en todos los navegadores, colóquelos en el código fuente de la manera correcta y luego use CSS para cambiar sus posiciones aparentes.
float
izquierda y derecha para cambiarlos visualmente, por ejemplo.fuente
A veces, la solución proporcionada por @palotasb no es suficiente. Hay casos de uso en los que, por ejemplo, se coloca un botón de envío "Filtro" encima de botones como "Siguiente y Anterior". Encontré una solución para esto: copie el botón de envío que debe actuar como el botón de envío predeterminado en un div oculto y colóquelo dentro del formulario sobre cualquier otro botón de envío. Técnicamente, se enviará con un botón diferente al presionar Entrar que al hacer clic en el botón Siguiente visible. Pero como el nombre y el valor son iguales, no hay diferencia en el resultado.
fuente
Usaría JavaScript para enviar el formulario. La función sería activada por el evento OnKeyPress del elemento de formulario y detectaría si la Enterclave fue seleccionada. Si este es el caso, enviará el formulario.
Aquí hay dos páginas que dan técnicas sobre cómo hacer esto: 1 , 2 . Basado en esto, aquí hay un ejemplo de uso (basado en aquí ):
fuente
Si realmente desea que funcione como un cuadro de diálogo de instalación, solo concéntrese en el botón "Siguiente" OnLoad.
De esa manera, si el usuario acierta Return, el formulario se envía y continúa. Si quieren regresar pueden presionar Tabo hacer clic en el botón.
fuente
Esto no se puede hacer con HTML puro. Debes confiar en JavaScript para este truco.
Sin embargo, si coloca dos formularios en la página HTML, puede hacerlo.
Form1 tendría el botón anterior.
Form2 tendría cualquier entrada de usuario + el botón siguiente.
Cuando el usuario presiona Enteren Form2, se activará el botón Enviar siguiente.
fuente
Puedes hacerlo con CSS.
Coloque los botones en el marcado con el
Next
botón primero, luego elPrev
botón después.Luego use CSS para colocarlos para que aparezcan de la manera que desee.
fuente
Esto funciona sin JavaScript o CSS en la mayoría de los navegadores:
Firefox, Opera, Safari y Google Chrome funcionan.
Como siempre, Internet Explorer es el problema.
Esta versión funciona cuando JavaScript está activado:
Entonces, la falla en esta solución es:
La página anterior no funciona si usa Internet Explorer con JavaScript desactivado.
Eso sí, el botón de retroceso todavía funciona!
fuente
Si tiene varios botones activos en una página, puede hacer algo como esto:
Marque el primer botón que desea activar al presionar la Entertecla como el botón predeterminado en el formulario. Para el segundo botón, asócielo al Backspacebotón del teclado. El Backspacecódigo de evento es 8.
fuente
Cambiar el orden de tabulación debería ser todo lo que se necesita para lograr esto. Mantenlo simple.
Otra opción simple sería colocar el botón Atrás después del botón Enviar en el código HTML, pero flotarlo a la izquierda para que aparezca en la página antes del botón Enviar.
fuente
Mantenga el mismo nombre de todos los botones de envío: "anterior".
La única diferencia es la
value
atributo con valores únicos. Cuando creamos el script, estos valores únicos nos ayudarán a determinar cuál de los botones de envío se presionó.Y escriba la siguiente codificación:
fuente
name="perv"
?Otra opción simple sería colocar el botón Atrás después del botón Enviar en el código HTML, pero flotarlo a la izquierda, para que aparezca en la página antes del botón Enviar.
Cambiar el orden de tabulación debería ser todo lo que se necesita para lograr esto. Mantenlo simple.
fuente
La primera vez que me topé con esto, se me ocurrió un truco onclick () / JavaScript cuando las opciones no son anteriores / siguientes que todavía me gustan por su simplicidad. Dice así:
Cuando se hace clic en cualquiera de los botones de envío, almacena la operación deseada en un campo oculto (que es un campo de cadena incluido en el modelo al que está asociado el formulario) y envía el formulario al Controlador, que toma todas las decisiones. En el controlador, simplemente escribe:
También puede ajustar esto ligeramente usando códigos de operación numéricos para evitar el análisis de cadenas, pero a menos que juegue con enumeraciones, el código es menos legible, modificable y autodocumentado y, de todos modos, el análisis es trivial.
fuente
De https://html.spec.whatwg.org/multipage/forms.html#implicit-submission
Tener la siguiente entrada sea type = "submit" y cambiar la entrada anterior a type = "button" debería dar el comportamiento predeterminado deseado.
fuente
Esto es lo que he probado:
if
declaración que haga la acción requerida si se hace clic en cualquiera de los botones.En PHP
fuente
Encontré esta pregunta cuando trataba de encontrar una respuesta básicamente a la misma cosa, solo con los controles ASP.NET, cuando descubrí que el botón ASP tiene una propiedad llamada
UseSubmitBehavior
que le permite establecer cuál envía.En caso de que alguien esté buscando la forma del botón ASP.NET para hacerlo.
fuente
Con JavaScript (aquí jQuery), puede deshabilitar el botón prev antes de enviar el formulario.
fuente
Prueba esto..!
fuente
Resolví un problema muy similar de esta manera:
Si JavaScript está habilitado (en la mayoría de los casos hoy en día), todos los botones de envío se " degradan " a botones al cargar la página a través de JavaScript (jQuery). Los eventos de clic en el botón " degradado " también se manejan a través de JavaScript.
Si JavaScript no está habilitado, el formulario se sirve en el navegador con varios botones de envío. En este caso, presionar Enterun
textfield
formulario dentro del formulario enviará el formulario con el primer botón en lugar del valor predeterminado deseado , pero al menos el formulario todavía es utilizable: puede enviarlo con los botones anterior y siguiente .Ejemplo de trabajo:
fuente
Puedes usar
Tabindex
para resolver este problema. También cambiar el orden de los botones sería una forma más eficiente de lograr esto.Cambie el orden de los botones y agregue
float
valores para asignarles la posición deseada que desea mostrar en suHTML
vista.fuente
Usando el ejemplo que diste:
Si hace clic en "Página anterior", solo se enviará el valor de "anterior". Si hace clic en "Página siguiente", solo se enviará el valor de "siguiente".
Sin embargo, si presiona en Enteralgún lugar del formulario, no se enviarán ni "prev" ni "next".
Entonces, utilizando pseudocódigo, podría hacer lo siguiente:
fuente