2011-01-23 14 views
5

Sto cercando di incorporare alcune associazioni di tasti nella mia webapp, e sto attraversando un periodo difficile con Opera. Ho questo codice:Opera preventDefault() su 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; 
    } 
} 

Funziona come un fascino in Firefox e Chrome, ma Opera apre ancora una nuova scheda. Lo stesso succede con return false;.

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

risposta

8

Opera doesn't supportpreventDefault su keydown, solo su keypress.

Come si può vedere nel this example, si dovrebbe associare un keypress gestore separato per Opera (adattato alla vostra situazione):

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

Grazie per averlo aiutato e mi dispiace per il bug :-( – hallvors

+0

@hallvors: Si sei il benvenuto, ma eh ... di quale bug ti dispiace? Lavori per Opera? –

+0

Sì, lo faccio :). Questo è uno dei problemi più comuni che fanno scattare gli sviluppatori web e dovremmo finalmente essere allineati con altri browser prima della prossima major release. – hallvors