KeyPress malfunction in Opera

2019-08-28 05:08发布

I'm using the following code to detect users' key pressing, in JavaScript:

$(document).bind('keydown', function (event) {
    'use strict';
    var keyCode = event.keyCode;

        switch (keyCode) {
        case '{N}':
             doSomething();
             break;

        default:
             break;
        }
});

Where doSomething is a previously defined function and {N} is any of the JavaScript Char Codes.

It works properly in every major browser, but in Opera even if a key remains pressed, it only calls doSomething once, instead of doing it until the key is released. What can I do to fix this?


Edit

I solved it using the keypress event instead of keydown (which is not well handled by Opera).

2条回答
叼着烟拽天下
2楼-- · 2019-08-28 05:30

this is a known bug which should (finally!) get fixed soon. In short, keydown events are not repeated while keypress events are. Listening to keypress instead if you want repetition (and don't care about keys that do NOT fire keypress in all browsers like most function keys) should be a reasonable cross-browser solution.

查看更多
够拽才男人
3楼-- · 2019-08-28 05:36

Opera makes a mess, the keydown event does not repeat, and you cannot prevent the default for keydown in opera. For more http://quirksmode.org/dom/events/

查看更多
登录 后发表回答