【问题标题】:Javascript .`keypress` event not firing on mobile deviceJavascript .`keypress`事件未在移动设备上触发
【发布时间】:2018-04-24 02:30:52
【问题描述】:

在这个页面上:

http://www.practicalnetworking.net/subnet.html

如果您单击“IP 地址”列中的任何输入框,然后按“。”或“/”键(句点或斜杠)将您跳转到下一个输入框。

或者至少,它可以在桌面浏览器上使用。在移动浏览器上,它似乎没有注册onkeypress 事件。

这是在句点或斜线按下时启用“跳转”的代码:

        // Function to jump to next box on . or / keys
        function jumpdot(event) {
            // Capture pressed key:
            var y = event.key;

            if (y == "." || y == "/" ) {
                // . or / was pressed, jump to next userinput box and prevent typing of . or /
                event.preventDefault();
                document.getElementsByName(uiNext)[0].focus();
            }
        }

是否有一种简单的方法可以在手机上也启用该功能?

【问题讨论】:

    标签: javascript mobile onkeypress


    【解决方案1】:

    keypress 事件被标记为Legacy in the DOM-Level-3 Standard。

    警告。为了参考和完整性,本规范中定义了按键事件类型,但本规范不推荐使用此事件类型。

    改用keydown 事件。信息:Keydown Event in Mozilla Developer

    您还应该考虑...

    KeyboardEvent.which :警告:此属性已弃用;如果可用,您应该改用 KeyboardEvent.key。

    KeyboardEvent.keyCode:警告:此属性已弃用;如果可用,您应该改用 KeyboardEvent.key。

    要读取按下的键,请改用event.key

    【讨论】:

    • 我将 onkeypress 更改为 onkeydown,还必须更改句点和斜线键码(从 46/47 到 190/191)。谢谢!但是...当我将var x = event.which || event.keyCode; 更改为var x = event.key; 时,它不起作用。您能提供更多指导吗?
    • PS:我在practicalnetworking.net/subnet2.html测试,如果你想看看。
    • 没关系,event.key 使用不同的键“代码”。我更新了代码并让它工作。感谢@Colxi 的提示。
    • (对不起,连续 4 个 cmets)不幸的是,这对原始问题没有帮助 - 按下句点或斜线时的“跳转到下一个框”仍然仅适用于桌面浏览器,而不适用移动浏览器 =/.
    • 当您按下句点或斜线键时,'document.getElementsByName(uiNext)[0]' 的值是多少?尝试将 ot 发送到控制台,仔细检查,选择器没有异常
    【解决方案2】:

    ev.keyCode 可能会有所帮助。这提供了有关击键的更多信息。

    【讨论】:

    • 但根据@colxi 的answer,显然它已被弃用。我已将代码更改为 event.key 并且该部分正在工作。移动功能仍然无法使用。
    【解决方案3】:

    使用oninput: 而不是onkeypress:。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2023-01-20
    • 2021-11-20
    • 2021-12-23
    相关资源
    最近更新 更多