为什么在 onkeydown 方法中返回 false 在 Chrome on Android 中不起作用?

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。输入数字时,它会从右边开始替换零。

这在我的桌面浏览器中工作得很好,但是当我在 phone 上打开页面时,它会将最新的数字添加到基值的末尾,因此它显示 00h 00m 01s1例子。但是它永远不会超过 1 个额外的数字,所以另一个例子可能是 12h 34m 56s6。我在这里缺少 Android 相关的东西吗?

所以我遗漏了显而易见的东西:Android returns 一个未识别的密钥,每个密钥的密钥代码都是 229,至少在查看 onkeydown 方法时是这样。

我在 '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;
    });
}