2011-01-23 11 views
5

Estoy tratando de incorporar algunas combinaciones de teclas en mi aplicación web, y estoy teniendo problemas con Opera. Tengo este código:Opera preventDefault() en el evento Keydown

window.onkeydown = function(e){ 
    var key = e.keyCode ? e.keyCode : e.charCode ? e.charCode : false; 
    if (e.ctrlKey && key === 84) { 
    alert("foo"); 
    e.preventDefault(); 
    // return false; 
    } 
} 

Funciona como un encanto en Firefox y Chrome, pero Opera aún abre una nueva pestaña. Lo mismo ocurre con return false;.

Mi Info: Opera/9.80 (X11; Linux i686; U; en) Presto/2.7.62 Version/11.00

Respuesta

8

Opera doesn't supportpreventDefault en keydown, sólo en keypress.

Como se puede ver en this example, debe enlazar un controlador separado keypress para Opera (adaptado a su situación):

var cancelKeypress = false; 

document.onkeydown = function(evt) { 
    evt = evt || window.event; 
    cancelKeypress = (evt.ctrlKey && evt.keyCode == 84); 
    if (cancelKeypress) { 
     return false; 
    } 
}; 

/* For Opera */ 
document.onkeypress = function(evt) { 
    if (cancelKeypress) { 
     return false; 
    } 
}; 
+2

Gracias por ayudarlo y lo del fallo :-( – hallvors

+0

@hallvors: Usted De nada, pero eh ... ¿de qué error lo lamentas? ¿Trabajas para Opera? –

+0

Sí, lo hago :). Este es uno de los problemas más comunes que hacen tropezar a los desarrolladores web y, finalmente, deberíamos alinearnos con otros navegadores antes de la próxima versión principal. – hallvors

Cuestiones relacionadas