2011-01-23 6 views
5

Próbuję osadzić kilka skrótów w mojej aplikacji internetowej i mam ciężkie czasy z Operą. Mam ten kod:Opera preventDefault() na zdarzeniu 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; 
    } 
} 

Działa jak urok w Firefoksie i Chrome, ale Opera nadal otwiera nową kartę. To samo dzieje się z return false;.

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

Odpowiedz

8

Opera doesn't supportpreventDefault na keydown tylko na keypress.

Jak widać w this example należy wiązać oddzielny keypress obsługi dla Opery (dostosowany do sytuacji):

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

Dzięki za pomoc i przepraszam go o błąd :-( – hallvors

+0

@hallvors: Ty "Powitajcie, ale eh ... o jaki błąd przepraszamy?" Pracujesz dla Opery? –

+0

Tak, robię :). Jest to jeden z najczęstszych problemów, które powodują problemy twórców stron internetowych i powinniśmy w końcu uzyskać wyrównanie z innymi przeglądarkami przed następną główną wersją. – hallvors