disable Opera function key in javascript

▼魔方 西西 提交于 2020-01-04 08:27:22

问题


I'm writing javascript code for a web emulator containing function keys. The user is able to press keyboard function keys to process something in the emulator, I used stopPropagation and preventDefault javascript function to stop/cancel browsers invoking their function key shortcut (e.g. F1 will invoke Firefox to open its help page) and the code works fine under Firefox and Chrome. But Opera didn't work, Opera invokes both my function and launches Opera help page. I'm using latest Opera 10.5 here. Can anyone help ?

this code is in FireFox javascript handle and this is attached in main body HTML onkeydown event:

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 used different code for CancelKey, which use ev.CancelBubble = true and ev.returnValue = false.


回答1:


To prevent the default action of a keypress in Opera, you need to do it in the keypress event. The following is adapted from 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;
    }
};



回答2:


I guess you are using onkeydown event. It doesn't give you the required thing in Opera. But works fine in IE and Firefox. So you have to use onkeypress event in opera. So you should have a separate code base for opera in your javascript which can handle Opera function keys.



来源:https://stackoverflow.com/questions/3050611/disable-opera-function-key-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!