[英]Why does returning false in onkeydown method not work in Chrome on Android?
我有一些代码可以在我的桌面浏览器中正常工作:
document.getElementById('oneshot-timer-input').onkeydown = function(KeyboardEvent) {
if (KeyboardEvent.key == "Backspace") {
data.splice(-1,1);
} else if (KeyboardEvent.key.length == 1 && !isNaN(Number(KeyboardEvent.key))) {
if (data.length < 6) {
if (data.length > 0 || KeyboardEvent.key != "0") {
data.push(KeyboardEvent.key);
}
}
}
updateInputField();
return false;
}
输入字段的值在另一个函数中通过以下方式设置:
document.getElementById('oneshot-timer-input').value = timeOutput;
它基本上保留默认操作,并在满足某些条件时设置输入字段的值(仅接受数字和退格键)。 基本值为00h 00m 00s
。 输入数字时,它将从右开始替换为零。
这在我的桌面浏览器中工作得很好,但是当我在手机上打开页面时,它将在基值的末尾添加最新的数字,例如,读取为00h 00m 01s1
。 但是,它永远不会超过1个数字,因此另一个示例可能是12h 34m 56s6
。 我在这里缺少与Android相关的东西吗?
所以我错过了明显的事情:至少在查看onkeydown方法时,Android为每个单个键返回一个带有keyCode 229的未识别键。
我在'textInput'上添加了另一个EventListener,可以完美地处理输入。 但是,退格仍然是一个问题,因为这根本不会触发键盘事件。 可悲的是,这意味着输入字段中的文本确实被删除了,但是并没有达到预期的目的。
实现方式:
var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1;
if (!isAndroid) {
document.getElementById('oneshot-timer-input').onkeydown = function(KeyboardEvent) {
var keyCode = KeyboardEvent.keyCode;
if (keyCode == 8 || (keyCode >= 48 && keyCode <= 57) || (keyCode >= 96 && keyCode <= 105)) {
KeyboardEvent.preventDefault();
handleKeyCode(KeyboardEvent.keyCode, KeyboardEvent.key);
} else if (KeyboardEvent.key == "Escape") {
setTimerState(TimerStateEnums.unlock, true);
} else if (KeyboardEvent.key == "Enter") {
document.getElementById("play-pause").checked = true;
play_pause(document.getElementById("play-pause"));
}
}
} else {
document.getElementById("oneshot-timer-input").addEventListener('textInput', function(TextEvent) {
TextEvent.preventDefault();
console.log(TextEvent);
var char = TextEvent.data;
var keyCode = char.charCodeAt(0);
handleKeyCode(keyCode, char);
return false;
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.