Pregunta

Tengo una configuración de Barra de menús con el widget Barra de menús de YUI , y tengo un YAHOO.util.KeyListener adjunto al documento para obtener acceso rápido mediante el teclado a los menús y elementos del submenú (por ejemplo, 's' para abrir el menú de Configuración). El problema es que keylistener aún se activará cuando un usuario esté en un elemento de entrada. Por ejemplo, un usuario podría estar escribiendo soup en un campo de texto, y el carácter 's' hará que el menú de configuración se abra.

Una solución sería deshabilitar keylistener cuando el foco está en un elemento de entrada, y habilitarlo en el desenfoque. ¿Cómo voy a hacer esto? ¿Hay una mejor solución?

¿Fue útil?

Solución

Lo felicito por tratar de proporcionar atajos de teclado, pero tenga en cuenta que esto será un poco molesto para implementar multiplataforma. Si es factible, le recomiendo usar teclas de acceso en las etiquetas < a > .

Si todavía vas, supongo que accesskey no funcionará para ti. Asumiré que has leído el tutorial de YUI relevante .

Si blur y focus son realmente el camino correcto a seguir, usaría algo como

YAHOO.util.Event.onDOMReady(init);
function init() {
    // set up the keyboard listeners

    setUpExceptionsToKeyboardShortcuts();
}

function disableShortcuts() {
    // Do what you've got to do
}

function enableShortcuts() {
    // Do what you've got to do
}

function setUpExceptionsToKeyboardShortcuts() {
    var focusable = document.getElementsByTagName('input');
    focusable = focusable.concat(document.getElementsByTagName('select'));
    focusable = focusable.concat(document.getElementsByTagName('textarea'));
    YAHOO.util.Event.addListener(focusable, 'focus', disableShortcuts);
    YAHOO.util.Event.addListener(focusable, 'blur', ensableShortcuts);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top