【问题标题】:javascript subtract(-) keycodejavascript减(-)键码
【发布时间】:2010-12-26 06:27:46
【问题描述】:

好的,我需要我的代码来检查是否按下了减/减/-,如果按下了我想要弹出一个警报框。我尝试了109189 键码,但我仍然没有得到想要的结果。虽然我按"-" 我没有收到那个警告框

【问题讨论】:

    标签: javascript keycode subtraction


    【解决方案1】:

    由于跨浏览器的实现不一致,人们正在远离event.keyCodeevent.charCode。相反,请使用event.code。这是一个string 字段。

    大部分浏览器都支持Array.includes,所以我倾向于这样做:

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

    【讨论】:

    • 在 Firefox 和 Chrome 中,当与 keydown 结合使用时,必须将 .includes(e.code) 更改为 .includes(e.originalEvent.code)
    【解决方案2】:

    您可以通过这种方式发现 keyCode:

    【讨论】:

    • 第一个链接不再有效
    【解决方案3】:

    1.event.keyCode = 109 在小键盘上是'-'

    2.event.keyCode = 189 is'-' in alphabate keybord key in chrome

    3.event.keyCode= 173 is '-' in alphabate keybord key on firefox & on chrome 173 keycord is Mute On|Off

    【讨论】:

    • 感谢您对 Firefox 如何处理 keyCode 189 的见解。对我来说似乎很愚蠢,没有为这样的东西设定标准。 keyCode 189 在我测试的所有浏览器上都是 -,除了 Firefox。让我想起了 IE 喜欢成为浏览器的开拓者,不管他们疯狂地挥舞砍刀会引起不兼容的问题。再次感谢您的帮助。
    【解决方案4】:

    不要在 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

    【讨论】:

    • 其实keydown 是比keypress 更好的答案。如果您查看兼容性列表 (quirksmode.org/js/keys.html) keypress 在某些旧版本的 Firefox 中不起作用
    • @fudgey:我认为您误读了那些兼容性表。 keypress 事件的 charCodewhich 属性自从我第一次尝试 Firefox(我认为它是 1.0 之前的版本)以来一直很高兴地在 Firefox 中正确报告字符代码。您可能从这些表中发现,Firefox 总是为 keypress 事件的 keyCode 属性报告 0,这在这里真的不是问题。
    • @TimDown 谢谢。 Chrome 使用 onkeydown 和键码 109 和 189,但 Firefox 没有。切换到 onkeypress 和您描述的方法后,检测“-”在任何地方都可以正常工作。
    【解决方案5】:

    我希望这对您有用,它会检测用户按下的键,如果您正在寻找它会显示警报,您可以将实际键更改为任何其他键。

    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
    

    【讨论】:

      【解决方案6】:

      您在按键事件期间测试的 JavaScript charCodesASCII。如果在 keydown 或 keyup 事件中使用,109 是正确的 keyCode

      “-”的 charCode 为 45。

      【讨论】:

      【解决方案7】:

      发布一些代码。这对我有用:

      document.onkeydown = function (e) {
          if (e.keyCode === 109 || e.keyCode === 189) {
              alert('minus sign pressed');
          }
      };
      

      完整的关键代码列表:http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx

      【讨论】:

      • 不要在keydown 事件中这样做。看我的回答。
      • 189 并不是所有键盘布局的减号。
      • 在示例页面中,键盘布局为英文。并非所有地方都是如此。
      猜你喜欢
      • 1970-01-01
      • 2010-12-25
      • 2019-01-26
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      相关资源
      最近更新 更多