Tengo un cuadro de diálogo jQuery UI con un formulario. Me gustaría simular un clic en uno de los botones del cuadro de diálogo para que no tenga que usar el mouse o la pestaña. En otras palabras, quiero que actúe como un cuadro de diálogo GUI normal donde simula presionar el botón "Aceptar".
Supongo que esta podría ser una opción simple con el cuadro de diálogo, pero no puedo encontrarla en la documentación de jQuery UI . Podría vincular cada entrada de formulario con keyup () pero no sabía si había una forma más simple / limpia. Gracias.
Respuestas:
No sé si hay una opción en el widget jQuery UI , pero podría simplemente vincular el
keypress
evento al div que contiene su diálogo ...Esto se ejecutará sin importar qué elemento tenga el foco en su diálogo, lo que puede o no ser bueno dependiendo de lo que desee.
Si desea que esta sea la funcionalidad predeterminada, puede agregar este código:
Aquí hay una vista más detallada de cómo se vería:
fuente
He resumido las respuestas anteriores y he agregado cosas importantes
Ventajas:
textarea
,select
,button
o entradas con botón de tipo, imagina usuario haga clic en entrartextarea
y obtener el formulario enviado en lugar de obtener nueva línea!$(document).ready
document
y no lo vinculará a cada cuadro de diálogo como en algunos de los códigos anteriores, para una mayor eficiencia$('<div><input type="text"/></div>').dialog({buttons: .});
:first
Desventajas
eq()
o llamar a una función dentro de la instrucción if'.ui-dialog'
Sé que la pregunta es antigua pero he tenido la misma necesidad, así que compartí la solución que he usado.
fuente
.delegate()
fue obsoleta en jQuery 3.0, por lo que.on()
(disponible desde 1.7) es probablemente la ruta a seguir en este punto.Funciona perfectamente con la última versión de JQuery UI (1.8.1). También puede usar: primero en lugar de: último, según el botón que desee establecer como predeterminado.
Esta solución, en comparación con la anterior seleccionada, tiene la ventaja de mostrar qué botón es el predeterminado para el usuario. El usuario también puede pulsar TAB entre los botones y presionar ENTER hará clic en el botón actualmente bajo foco.
Salud.
fuente
Una forma cruda pero efectiva de hacer que esto funcione de manera más genérica:
Luego, cuando crea un nuevo cuadro de diálogo, puede hacer esto:
Y úselo como un diálogo jquery normal a partir de entonces:
Hay maneras de mejorar eso para que funcione en casos más especiales. Con el código anterior, elegirá automáticamente el primer botón del cuadro de diálogo como el botón que se activará cuando se presione Intro. También se supone que solo hay un diálogo activo en un momento dado, lo que puede no ser el caso. Pero se entiende la idea.
Nota: Como se mencionó anteriormente, el botón que se presiona al ingresar depende de su configuración. Por lo tanto, en algunos casos querrá usar el: primer selector en el método .find y en otros puede usar el: último selector.
fuente
En lugar de escuchar códigos clave como en esta respuesta (que no pude poner a trabajar), puede vincular el evento de envío del formulario dentro del diálogo y luego hacer esto:
Entonces, todo se vería así
Tenga en cuenta que diferentes navegadores manejan la tecla enter de manera diferente, y algunos no siempre hacen un envío al ingresar.
fuente
Ben Clayton es el más limpio y corto y se puede colocar en la parte superior de la página de índice antes de que se inicialicen los cuadros de diálogo de jquery. Sin embargo, me gustaría señalar que ".live" ha quedado en desuso. La acción preferida ahora es ".on". Si desea que ".on" funcione como ".live", deberá usar eventos delegados para adjuntar el controlador de eventos. Además, algunas otras cosas ...
Prefiero usar el método ui.keycode.ENTER para probar la tecla enter ya que no tiene que recordar el código de la llave real.
El uso de "$ ('. Ui-dialog-buttonpane button: first', $ (this))" para el selector de clics hace que todo el método sea genérico.
Desea agregar "return false;" para evitar el incumplimiento y detener la propagación.
En este caso...
fuente
No sé más simple, pero normalmente rastrearías qué botón tiene el foco actual. Si el foco se cambia a un control diferente, entonces el "foco del botón" permanecería en el botón que tenía el foco al último. Normalmente, el "foco del botón" comenzaría en su botón predeterminado. Tocar un botón diferente cambiaría el "foco del botón". Tendría que decidir si navegar a un elemento de formulario diferente restablecería el "foco del botón" al botón predeterminado nuevamente. Probablemente también necesitará algún indicador visual que no sea el predeterminado del navegador para indicar el botón enfocado, ya que pierde el enfoque real en la ventana.
Una vez que tenga la lógica de enfoque del botón desactivada e implementada, entonces probablemente agregaría un controlador de teclas al cuadro de diálogo e invocaría la acción asociada con el botón actualmente "enfocado".
EDITAR : Supongo que desea poder presionar enter cada vez que complete elementos de formulario y tenga prioridad la acción del botón "actual". Si solo desea este comportamiento cuando el botón está realmente enfocado, mi respuesta es demasiado complicada.
fuente
Encontré esta solución, funciona en IE8, Chrome 23.0 y Firefox 16.0
Se basa en el comentario de Robert Schmidt.
Espero que ayude a cualquiera.
fuente
A veces olvidamos lo fundamental de lo que el navegador ya admite:
Esto hará que la ENTERclave envíe el formulario.
fuente
Lo hice así ...;) Espero que sea útil para alguien ...
fuente
Esto debería funcionar para activar el clic del controlador de clic del botón. Este ejemplo supone que ya ha configurado el formulario en el cuadro de diálogo para utilizar el complemento jquery.validate. pero podría adaptarse fácilmente.
fuente
Me doy cuenta de que ya hay muchas respuestas, pero creo que, naturalmente, mi solución es la más perfecta y posiblemente la más corta. Tiene la ventaja de que funciona en cualquier diálogo creado en cualquier momento en el futuro.
fuente
Aquí esta lo que hice:
En este caso, myForm es un objeto jQuery que contiene el html del formulario (nota, no hay etiquetas de "formulario" allí ... si las coloca en la pantalla completa se actualizará cuando presione "enter").
Cada vez que el usuario presiona "enter" dentro del formulario, será el equivalente a hacer clic en el botón "ok".
Esto también evita el problema de tener el formulario abierto con el botón "ok" ya resaltado. Si bien eso sería bueno para formularios sin campos, si necesita que el usuario complete los datos, entonces probablemente desee que se resalte el primer campo.
fuente
hecho y hecho
fuente
si conoce el selector de elemento de botón:
Debería hacer el truco por ti. Esto enfocará el botón ok, y enter lo 'hará clic', como era de esperar. Esta es la misma técnica utilizada en los diálogos nativos de la interfaz de usuario.
fuente
fuente
Encontré una solución bastante simple para este problema:
fuente
Esto funciono muy bien para mi..
fuente
Ninguna de estas soluciones parecía funcionar para mí en IE9. Terminé con esto ...
fuente
Debajo del cuerpo se usa porque el diálogo DIV agregado en el cuerpo, por lo que el cuerpo ahora escucha el evento del teclado. Probó en IE8,9,10, Mojila, Chrome.
fuente
Porque no tengo suficiente reputación para publicar comentarios.
La respuesta modificada de Basemm # 35 también agrega Escape para cerrar el diálogo.
fuente
Funciona bien ¡Gracias!
open: function () { debugger; $("#dialogDiv").keypress(function (e) { if (e.keyCode == 13) { $(this).parent().find("#btnLoginSubmit").trigger("click"); } }); },
fuente
Dale clases a tus botones y selecciónalos de la manera habitual:
fuente