前提
JavaScriptのkeydown、keyupでキーボードの押下状態を監視しているのですが、
keyupが発火しないときがあります。
下記のコードはそれを確認するためのサンプルで、
押している状態のキーを画面に表示するというものです。
サンプルのソースコード
JavaScript
1var a = new Object(); 2window.addEventListener("load", function() { 3 window.addEventListener("keydown", function(e) { 4 a[e.key] = 1; 5 }); 6 window.addEventListener("keyup", function(e) { 7 delete a[e.key]; 8 }); 9 setInterval(function() { 10 document.body.innerHTML = Object.keys(a).join(" , "); 11 }, 50); 12});
試したこと
上記のコードで、
キーボードでガチャガチャとキーを押していると、たまにkeupが発火せず、
画面上に押下状態のキーとして表示され続けるものが現れます。
そのキーはABCD,,,のような文字を入力するキーで発生して、
Enterや矢印のキーなどでは発生しないように思います。
また、keyupが発火しなかったキー(以下、該当キー)は、
それ以外のキーをガチャガチャ押していると、
該当キーを押していないのにkeyupが発火することがあります。
他に試したこととして、
addEventListenerの第3引数にも色々オプションを付けてみましたが、
特に解決できませんでした。
これはブラウザの特性上どうしようもないものなのか、
それとも解決策があるのか、教えていただけますと幸いです。
(私の環境はWin11でChromeを使用しています)
よろしくお願いします。
追記:確認したOSやブラウザ
ご指摘いただき他の環境で確認したところ、結果は下記のとおりでした。
▽再現されたPC
デスクトップPC Windows11(64bit) Chrome、Edge
ノートPC Windows11(64bit) Chrome、Edge
▽問題無かったPC
ノートPC Windows10(64bit) Chrome、Edge
MacBook Ventura13.1 Chrome、Safari
RaspberryPi RaspberryPiOS Chromium
一部の環境下で発生しているようです。
再現されたPCでは別メーカーのキーボードに変えても発生しました。

回答2件
あなたの回答
tips
プレビュー