Pregunta

Tengo una página web donde me gustaría reasignar Ctrl + N a un comportamiento diferente. Seguí el ejemplo de registro de escuchas clave de YUI y se llama a mi función, pero Firefox aún crea una nueva ventana del navegador. Las cosas parecen funcionar bien en IE7. ¿Cómo detengo la aparición de la nueva ventana?

Ejemplo:

var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 },
             {fn:function(event) {
                     YAHOO.util.Event.stopEvent(event); // Doesn't help
                     alert('Click');}});
kl2.enable();

Es posible eliminar el comportamiento predeterminado. Google Docs anula Ctrl + S para guardar su documento en lugar de abrir el cuadro de diálogo Guardar de Firefox. Intenté el ejemplo anterior con Ctrl + S pero el cuadro de diálogo Guardar de Firefox todavía aparece. Como Google puede evitar que aparezca el diálogo de guardar, estoy seguro de que hay una manera de evitar la mayoría de los atajos de teclado predeterminados.

¿Fue útil?

Solución

El truco es que la función 'fn' es whack.

Experimentalmente, puede ver que el tipo de función para fn toma dos parámetros. El primer parámetro contiene el tipo de evento. El segundo contiene ... y esto es chiflado: una matriz que contiene el punto de código en el índice 0 y el objeto de evento real en el índice 1.

Para cambiar un poco el código, debería verse así:

function callback(type, args)
{
    var event = args[1]; // the actual event object
    alert('Click');

    // like stopEvent, but the event still propogates to other YUI handlers
    YAHOO.util.Event.preventDefault(event);
}
var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 }, {fn:callback});
kl2.enable();

Además, por amor a lisp, no use puntos de código sin procesar en su código. Utilice 'N'.charCodeAt (0) en lugar de' '78' '. O envuélvalo como una función

function ord(char)
{
    return char.charCodeAt(0);
}

Otros consejos

Solo estoy adivinando aquí, pero no creo que se pueda hacer.

Si es posible, definitivamente no debería ser. Los métodos abreviados de teclado genéricos son algo con lo que no debe meterse. ¿Que sigue? Enganche el botón de cerrar ventana para abrir una nueva ventana ...

Usando la utilidad de eventos de YUI, puede intentar usar el método stopEvent :

Sin embargo, debido a que la mayoría de los usuarios están acostumbrados a esas pulsaciones de teclas que hacen una cosa en particular en el navegador (nueva ventana en su ejemplo), siempre evito los choques, lo que en efecto significa que no uso ninguna de las teclas de control o meta.

Simplemente uso letras, por su cuenta, lo cual está bien hasta que tenga cuadros de entrada de texto, por lo que este consejo podría ser menos útil para usted.

Aunque la anulación de los accesos directos predeterminados del navegador no es trivial, en algunos casos vale la pena hacerlo ya que proporciona una apariencia más profesional de la aplicación. Eche un vistazo a este script:

http://www.openjs.com/scripts/events /keyboard_shortcuts/index.php#disable_in_input

Resulta que funciona bien para mí ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top