我正在为包含功能键的Web模拟器编写javascript代码。用户可以按下键盘功能键来处理模拟器中的内容,我使用stopPropagation和preventDefault javascript函数来停止/取消浏览器调用其功能键快捷键(例如F1将调用Firefox打开其帮助页面)并且代码工作正常在Firefox和Chrome下。但Opera没有工作,Opera调用我的功能并启动Opera帮助页面。我在这里使用最新的Opera 10.5。有人可以帮忙吗?
此代码位于FireFox javascript句柄中,并附在主体HTML onkeydown事件中:
function KeyHandler(ev)
{
if(112==ev.keyCode) {InvokeF1();return CancelKey(ev);}
if(113==ev.keyCode) {InvokeF2();return CancelKey(ev);}
...
}
function CancelKey(ev)
{
ev.stopPropagation();
ev.preventDefault();
}
IE使用了不同的代码用于CancelKey,它使用ev.CancelBubble = true和ev.returnValue = false。
答案 0 :(得分:3)
要防止Opera中按键的默认操作,您需要在keypress
事件中执行此操作。以下内容改编自my answer to this similar question:
var cancelKeypress = false;
document.onkeydown = function(evt) {
evt = evt || window.event;
cancelKeypress = /^(112|113)$/.test("" + evt.keyCode);
if (cancelKeypress) {
return false;
}
};
/* For Opera */
document.onkeypress = function(evt) {
if (cancelKeypress) {
return false;
}
};
答案 1 :(得分:0)
我猜你正在使用onkeydown
事件。它没有在Opera中提供所需的东西。
但在IE和Firefox中运行良好。所以你必须在opera中使用onkeypress
事件。所以你应该在你的javascript中有一个单独的opera代码库,可以处理Opera功能键。