event.key 在移动浏览器中未定义 keyup、keydown 和 keypress
event.key is undefined in mobile browsers for keyup, keydown and keypress
下面的代码应该简单地抑制任何按键并将按下的键添加到 div 中。这在桌面上运行良好,但在移动设备上(safari 和 chrome)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
都可用,但将它们转换为字符串会在不同的键盘布局和语言上给我带来不想要的结果,尤其是对于特殊字符。
有没有办法直接获取key的值?
这里有一个代码笔示例以防万一: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;
})
由于上、下、左或右等控制字符没有字符表示,因此您需要在代码本身中对字符实现进行硬编码。我使用了来自 document.onkeydown 事件侦听器的 Window.event.KeyCode 事件并且它有效。
这是我的解决方案:
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);
}
}
下面的代码应该简单地抑制任何按键并将按下的键添加到 div 中。这在桌面上运行良好,但在移动设备上(safari 和 chrome)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
都可用,但将它们转换为字符串会在不同的键盘布局和语言上给我带来不想要的结果,尤其是对于特殊字符。
有没有办法直接获取key的值?
这里有一个代码笔示例以防万一: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;
})
由于上、下、左或右等控制字符没有字符表示,因此您需要在代码本身中对字符实现进行硬编码。我使用了来自 document.onkeydown 事件侦听器的 Window.event.KeyCode 事件并且它有效。 这是我的解决方案:
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);
}
}