2012-05-01 22 views
8

Básicamente, estoy usando jQuery Hotkeys plugin por el Sr. Resig para capturar y manejar los atajos como ctrl+o etc ...jQuery teclas de acceso rápido ... no tan globales

OK, tal vez no lo uderstand el concepto, pero estaba con la impresión de que ctrl+o activado en cualquier parte dentro del documento será capturado por un controlador de teclas rápidas de documentos.

Por ejemplo, el código siguiente funciona en general ...

jQuery(document).bind('keydown', 'ctrl+o', fn); 

Sin embargo, fracasa miserablemente si el usuario activa la tecla de acceso directo cuando dentro de un cuadro de entrada.

sólo funciona si hago lo siguiente:

jQuery('body, input').bind('keydown', 'ctrl+o', fn); 

que es bastante malo para mi salud, ya que implica la unión del maldito manipulador cada vez que se añade un nuevo cuadro de entrada para el DOM. Peor aún, no tengo idea a qué vincularme en el caso de widgets complejos como CodeMirror.

No sé si mi problema tiene sentido, ¿quizás estoy usando el enfoque equivocado? También he tratado de unión a los siguientes objetos, pero no funcionó: window, document, body, div[contains the whole page]

NB: Puedetry it out here.

+0

quizás pueda usar el 'on()' aquí? por lo que funcionará con cada entrada que se haya agregado. ¿O me estoy perdiendo algo? –

+0

@Topener No quiero * solo * enlazar a todas las entradas * actuales *, sino también a las * futuras *. La belleza de agregar eventos de esta manera es que no necesita variables globales para contener sus funciones de manejo de eventos, solo lo hace una vez cuando sea necesario. – Christian

+0

Pero el punto aquí no se trata de que yo agregue los eventos, sino que la funcionalidad de la tecla de acceso rápido debería hacerlo ella misma. Quiero decir, ese es el punto de una tecla de acceso rápido ... presionar 'ctrl + s' en el editor de Netbeans produce el mismo efecto de hacerlo dentro de la lista de proyectos de netbeans (como un ejemplo). – Christian

Respuesta

6

Esto es en realidad la intención funcionalidad del plugin:

// Don't fire in text-accepting inputs that we didn't directly bind to 
if (this !== event.target && (/textarea|select/i.test(event.target.nodeName) || 
    event.target.type === "text")) { 
    return; 
} 
+0

Bueno, para ser honesto, no sé cómo solucionar mi problema sin cambiar ese código :( – Christian

+0

Supongo que podría pasar una opción para deshabilitar la función ... luego enviar un parche a Resig's ... – Christian

+0

Sí, no veo una forma de evitarlo sin modificar el plugin de alguna manera. –

1

Sí, JqueryHotkeys fracasado estrepitosamente si el usuario activa la tecla de acceso directo cuando dentro de un cuadro de entrada.

Como alternativa, cuando navegué descubrí shortcut.js, que proporciona una funcionalidad similar a la de Jquery-Hotkeys.

Importantemente también tiene una opción para habilitar o deshabilitar la "función de acceso directo definida por el usuario" cuando está dentro de un cuadro de entrada.

Cuestiones relacionadas