JavaScript减法操作符(-)的keycode是什么?

20

好的,我需要我的代码检查是否按下减号/减号/-,如果按下了,我希望弹出一个警告框。我尝试使用109189键码,但仍然没有得到预期的结果。虽然我按下了"-",但我没有得到警告框。

7个回答

35

JavaScript中的charCodes是在按键事件期间进行测试的,它们是ASCII字符。ASCII。如果在键按下或键抬起事件中使用,109是正确的keyCode

"-"的charCode为45。


1
谢谢,我在哪里可以找到完整的JavaScript按键代码列表?我找到了一两个,但是我发现“-”是109和189。 - kmunky
2
http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx - Matt
好的,我找到了一个好的:P http://forums.devarticles.com/javascript-development-22/very-helpful-key-codes-list-72985.html - kmunky
为什么要担心字符代码的实际值?为什么不只是使用String.fromCharCode将其转换为字符串呢? - Tim Down
这是一件可能过早优化的事情,但如果不必要的话,为什么要有意降低一个被频繁调用的函数的性能呢。如果可读性是个问题,你还可以在不影响性能的情况下加上注释。 - Dave Ward
显示剩余2条评论

13

1. event.keyCode = 109 是数码键盘上的“-”。

2. event.keyCode = 189 是 Chrome 浏览器字母键盘上的“-”键。

3. event.keyCode= 173 在 Firefox 和 Chrome 浏览器中都是字母键盘上的“-”键,同时在 Chrome 中,按下 173 键可进行静音开关的切换。


感谢您对Firefox处理“keyCode 189”的见解。我觉得这种事情没有设定标准很愚蠢。在我测试的所有浏览器中,“keyCode 189”都是“-”,除了Firefox。这让我想起IE喜欢成为浏览器的开拓者,而不管它们疯狂挥舞大砍刀所引起的不兼容问题。再次感谢您的帮助。 - fmc

9

不要在 keydown 事件处理程序中这样做 - 这会让你受制于不同浏览器对键码的理解以及不同键盘类型的键码变化。请在 keypress 事件中执行此操作,然后您可以获取实际所需的字符代码。

document.onkeypress = function(evt) {
    evt = evt || window.event;
    var charCode = evt.which || evt.keyCode;
    var charStr = String.fromCharCode(charCode);
    if (charStr == "-") {
        alert("Minus!");
    }
};

关于JavaScript按键事件的所有信息: http://unixpapa.com/js/key.html


实际上,keydownkeypress更好。如果您查看兼容性列表(http://www.quirksmode.org/js/keys.html),您会发现在一些旧版本的Firefox中,`keypress`无法正常工作。 - Mottie
@fudgey:我认为你误读了那些兼容性表格。自从我第一次尝试以来,keypress事件的charCodewhich属性在Firefox中一直能够正确地报告字符代码,这可能是你从这些表格中挑选出来的内容。你可能会从这些表格中发现,Firefox始终将keypress事件的keyCode属性报告为0,但这并不是一个问题。 - Tim Down
@TimDown 谢谢。在 Chrome 中,使用 onkeydown 和键码 109 和 189 可以工作,但在 Firefox 中不行。切换到 onkeypress 并使用您描述的方法后,可以在任何地方很好地检测到“-”。 - Akseli Palén

7

第一个链接不再有效 - Manoochehr Dadashi

6

不要在 keydown 事件中这样做。请查看我的答案。 - Tim Down
1
189 不是所有键盘布局的减号符号。 - oxygen
在示例页面中,键盘布局是英语。但并非所有地方都是如此。 - kernel

6

由于不同浏览器的实现不一致,人们正在逐渐放弃使用 event.keyCodeevent.charCode。相反,应该使用 event.code。这是一个 字符串 字段。

大多数浏览器都支持 Array.includes,因此我倾向于执行以下操作:

if (['-', 'Minus', 'NumpadSubtract'].includes(e.code)) {
    // do something
}

在Firefox和Chrome中,当与keydown一起使用时,需要将.includes(e.code)更改为.includes(e.originalEvent.code) - knot22

3

我希望这对你有用,它可以检测用户按下的键,如果是你要找的那个键,则显示警报。你可以将实际键更改为任何其他键。

function detectSubstract(e)
{
var evtobj=window.event? event : e //distinguish between IE's explicit event object (window.event) and Firefox's implicit.
var unicode=evtobj.charCode? evtobj.charCode : evtobj.keyCode
var actualkey=String.fromCharCode(unicode)

    if (actualkey=="-")
    {
        alert('You pressed the minus key')
    }
}
document.onkeypress=detectSubstract

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