繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM