2011-02-04 17 views
5

Estoy usando Prototype y hago Event.observe en window.document.Prototipo observa problema de evento en Opera

Estoy capturando enter (keyCode 13) y alt + f (altKey & & keyCode = 70).

Mi código está funcionando súper con Firefox, IE y Chrome. Con Opera no. Enter está atrapado, pero solo si mi foco no está en ninguna entrada de texto. Alt + F no funciona en absoluto.

¿Es un error en Prototype o tengo que hacer algo 'extra' en Opera para continuar? Como he dicho, en todos los demás navegador funciona mi código ....

Respuesta

2

En primer lugar, el siguiente es un recurso útil: http://unixpapa.com/js/key.html

En segundo lugar, usted debe saber que hay una diferencia entre keydown (o keyup) y la pulsación de tecla . la pulsación de tecla no suele permitir las teclas modificadoras, aunque sí permite algunas en el control Opera. Es mejor usar la clave para la coherencia entre navegadores.

me sale === keyCode 13 en Opera 11.10 no importa si se entra en el cuadro de texto o no, y no importa si el uso de prototipos así:

Event.observe(document, 'keydown', function (e) { 
    alert(e.charCode+'::'+e.keyCode); 
}); 

o utilizando el método nativo directamente (utilizando para attachEvent IE):

if (document.addEventListener) { 
    document.addEventListener('keydown', function (e) { 
     alert(e.charCode+'::'+e.keyCode); 
    }, false); 
} 
else { // IE 
    document.attachEvent('onkeypress', function (e) { 
     alert(e.charCode+'::'+e.keyCode); 
    }); 
} 

sin embargo, alt es de hecho no se detecta dentro de un cuadro de texto a menos que se combina con una clave de control o la función (a pesar de que no funciona en Chrome o IE). Esto puede deberse a que Windows usa alt para dar acceso a la barra de menú de las aplicaciones.

Puede intentar usar la tecla de control y usar preventDefault() (para evitar comportamientos predeterminados como ctrl-f haciendo una búsqueda de página) aunque esto podría molestar a los usuarios que podrían no desear que el navegador se deshabilite para su página.

0

Alt-F activa el menú y Opera no permite que JavaScript maneje esta tecla, presione.

Cuestiones relacionadas