2011-01-23 2 views
5

Я пытаюсь встроить некоторые привязки клавиш в свой webapp, и у меня тяжелые времена с Opera. У меня есть этот код:Opera preventDefault() on keydown event

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; 
    } 
} 

Он работает как очарование в Firefox и Chrome, но Opera по-прежнему открывает новую вкладку. То же самое происходит с return false;.

Моя информация: Opera/9.80 (X11; Linux i686; U; en) Presto/2.7.62 Version/11.00

ответ

8

Opera doesn't supportpreventDefault на keydown, только на keypress.

Как вы можете видеть в this example, вы должны связать отдельный keypress обработчик для Opera (адаптировано к вашей ситуации):

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

Спасибо за помощь ему и жаль об ошибке :-( – hallvors

+0

@hallvors: Вы «приветствую, но э ... какая ошибка, о которой вы сожалеете? Вы работаете в Opera? –

+0

Да, я делаю :). Это одна из самых распространенных проблем, с которыми сталкиваются веб-разработчики, и мы должны, наконец, выровняться с другими браузерами до следующего крупного выпуска. – hallvors