允许在输入JavaScript中使用键盘快捷键

3

我有一个tel输入框,我只允许输入数字、退格和制表符,如下所示:

$("#phone").on('keydown',function(e) { 
var a = [];
var k = e.which;
for (i = 48; i < 58; i++)
    a.push(i);
a.push(8);
a.push(9);
if (!(a.indexOf(k)>=0))
    e.preventDefault();
});

但是,如果在输入框中,您不能使用cmd+Rctl+R等键盘快捷键进行刷新等操作,这并不是什么大问题,但我想知道是否有一种方法可以检查用户是否尝试使用键盘快捷键(特别是刷新)?

谢谢。


我真的不太理解这个问题。我看不到任何解决方法。浏览器通常都有一个刷新按钮。 - www139
@www139 这不是什么大问题,我只是好奇而已。 - iqueqiorio
好的,明白了 :) - www139
我建议限制可以保留在输入框中的字符类型。因此,基本上在 keyup 事件中,检查输入框的值并删除任何非数字、退格和制表符。 - Nick Zuber
@NickZ,你能提供一个例子吗? - iqueqiorio
@iqueqiorio,我已经发布了一个带有示例的答案,快去看看吧。 - Nick Zuber
3个回答

0

为了捕获键的组合,您可以在条件语句中使用 && 运算符。对于 Windows 系统,您应该使用 event.ctrlKey,而对于 Mac 系统,您应该使用 event.metaKey

针对 Windows 系统:

if (event.ctrlKey && event.keyCode === 82)

适用于Mac

if (event.metaKey && event.keyCode === 82)

metaKey 属性返回一个布尔值,指示在触发鼠标事件时是否按下了“META”键。

并非所有键盘都有 meta 键。Sun 微系统键盘、MIT 和 LISP 机器键盘通常具备该键。meta 键可能被标记为“META”或用实心菱形符号“◆”表示。

在 Mac 键盘上,META 键由“Command/Cmd”(“⌘”)键代表。


event.ctrlKey 这个也适用于 Mac 的 cmd 键吗,还是有所不同? - iqueqiorio
对于Mac电脑,您可以使用event.metaKey。我更新了我的答案。 - Richard Hamilton

0
$(selector).on('keydown', function (e) {
    if (e.keyCode === 91)
        console.log('command key!');

    if (e.keyCode === 17)
        console.log('ctrl key!');
});

适当处理这些键。


好的,这个可以让cnd/ctrl键被按下,但是当其中一个键被按下时,如何让R键也被按下呢?我尝试在内部添加一个if来检查R键,但是没有起作用。 - iqueqiorio

0
更好的方法是限制输入中允许的字符类型,以实现您想要的效果。基本上,每次触发 keydown 事件时,检查输入并删除任何不是数字或空格的字符。
请考虑以下内容:
$("#phone").on('keydown',function() { 
     // This will remove all characters that are not digits between 0-9
     this.value = this.value.replace(/[^0-9\.]/g,'');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接