Javascript 按下键事件时的默认值()

Javascript 按下键事件时的默认值(),javascript,linux,opera,keyevent,preventdefault,Javascript,Linux,Opera,Keyevent,Preventdefault,我正试图在我的webapp中嵌入一些键绑定,但我在Opera方面遇到了困难。我有以下代码: 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;

我正试图在我的webapp中嵌入一些键绑定,但我在Opera方面遇到了困难。我有以下代码:

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仍然会打开新的标签。
返回false时也会发生同样的情况

我的信息:
Opera/9.80(X11;Linux i686;U;en)Presto/2.7.62版本/11.00
Opera
preventDefault
on
keydown
,仅在
按键上

如中所示,您应该为Opera绑定一个单独的
keypress
处理程序(适合您的情况):


谢谢你帮助他,并对虫子感到抱歉:-(@hallvors:不客气,但是呃…你对什么虫子感到抱歉?你为Opera工作吗?是的,我为:)。这是困扰web开发人员的最常见问题之一,我们最终应该在下一个主要版本发布之前与其他浏览器保持一致。@hallvors:啊,是的,我现在明白了。很高兴这里有个歌剧演员。顺便说一句,这确实是Twitter一个可怕的浏览器嗅探决定,特别是当他们使用jQuery时(是的,我看到了
input
textInput
)之间的区别。)@hallvors:还有一个问题:当Opera不再有这个bug时,我们将如何检测它?使用特征推断检测浏览器版本,如?甚至还有一个精确描述支持哪些函数的方法。;-)
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;
    }
};