次のコードは、キーの押し下げを抑制し、押したキーをdivに追加することを想定しています。これはデスクトップでは正常に動作しますが、モバイル(サファリおよびクロム)では機能しますevent.key
は未定義です。
<html>
<head></head>
<body>
<input />
<div id="#test"></div>
<script>
var str = '';
var el = document.getElementById('#test');
document.addEventListener('keypress', function(event) {
str += event.key;
event.preventDefault();
el.innerHTML = str;
})
</script>
</body>
</html>
event.keyCode
およびevent.keyIdentifier
はどちらも使用できますが、それらを文字列にキャストすると、さまざまなキーボードレイアウトや言語、特に特殊文字で望ましくない結果が得られます。
とにかくキーの値を直接取得する方法はありますか?
念のためのコードペンの例を次に示します。 https://codepen.io/anon/pen/pryYyQ
唯一の回避策は、キーコードを取得して文字列にキャストすることです。
var str = '';
var el = document.getElementById('#test');
document.addEventListener('keypress', function(event) {
const currentCode = event.which || event.code;
let currentKey = event.key;
if (!currentKey) {
currentKey = String.fromCharCode(currentCode);
}
str += currentKey;
event.preventDefault();
el.innerHTML = str;
})
上、下、左、右などの制御文字の文字表現がないため、コード自体に文字の実装をハードコーディングする必要があります。私はWindow.event.KeyCodedocument.onkeydownイベントリスナーからのイベントを使用しました。これが私の解決策です:
window.onload = function() {
try {
var el = document.getElementById("#test");
var str = '';
document.onkeydown = function() {
var currentKey = window.event.keyCode;
switch (currentKey) {
case 40:
str = "down";
break;
case 37:
str = "left";
break;
case 39:
str = "right";
break;
case 38:
str = "up";
break;
}
event.preventDefault;
e1.innerHTML = str;
};
} catch (e) {
alert(e.message);
}
}