【问题标题】:event.keyCode is different in keydown/keyup and keypressevent.keyCode 在 keydown/keyup 和 keypress 中是不同的
【发布时间】:2014-07-03 09:59:50
【问题描述】:

我正在为用户定义的快捷键组合创建一个文本框,它只是打印出修饰符和键。

我真的不在乎它是否在您按下或释放键时设置,所以我从keypress 事件开始。首先,修饰符似乎会影响键码(例如换档,这意味着键码根本不是键码,而是键入的字符码),而且preventDefault 似乎无法正常工作,所以我改为keydown。这在 event.keyCode 中引入了差异。例如,逗号, 产生了一个令人愉快的ascii keyCode=44,但现在它是一个令人作呕的keyCode=188。

一个测试页面:http://www.javascripter.net/faq/keyboardeventproperties.htm

我真的很想在这里有一些标准化的键码,或者至少有一些一致的键码。我的要求是解决方法。要么:

  1. 对于奇怪但更一致的keydown/@987654334 @?

  2. 可以将keypress 设置为更像keydown/keyup 以实际给出被按下的键,是否有类似preventDefault 的机制来阻止浏览器拦截快捷方式?

相关:http://www.javascripter.net/faq/keycodes.htm

【问题讨论】:

  • charCode 在keypress 事件中是否有帮助?
  • 不清楚你想要什么。您想要 a 和 A 的不同代码吗?
  • 这个问题有帮助吗:stackoverflow.com/questions/3396754/…
  • @Barmar 按键有问题,如前所述。不,我追求的是捷径。 a 和 A 是同一个物理密钥,我希望密钥代码能够反映这一点(更新后的 Q)。

标签: javascript dom-events keyboard-shortcuts keycode


【解决方案1】:

目前,我将使用 keydown 和它的修改版本:http://www.javascripter.net/faq/fromkeycode.js

function fromKeyCode(n) {
    if( 47<=n && n<=90 ) return unescape('%'+(n).toString(16))
    if( 96<=n && n<=105) return (n-96).toString()
    if(112<=n && n<=135) return 'F'+(n-111)
    if(n==8)  return 'Backspace'
    if(n==9)  return 'Tab'
    if(n==13) return 'Enter'
    if(n==16) return 'Shift'
    if(n==17) return 'Ctrl'
    if(n==18) return 'Alt'
    if(n==19) return 'Pause'
    if(n==20) return 'Caps_lock'
    if(n==27) return 'Esc'
    if(n==32) return 'Space'
    if(n==33) return 'Page_up'
    if(n==34) return 'Page_down'
    if(n==35) return 'End'
    if(n==36) return 'Home'
    if(n==37) return 'Left'
    if(n==38) return 'Up'
    if(n==39) return 'Right'
    if(n==40) return 'Down'
    if(n==42) return '*' //Opera
    if(n==43) return '+' //Opera
    if(n==45) return 'Insert'
    if(n==46) return 'Delete'
    if(n==91) return 'Meta'
    if(n==92) return 'Meta'
    if(n==106) return '*'
    if(n==107) return '+'
    if(n==109) return '-'
    if(n==110) return '.'
    if(n==111) return '/'
    if(n==144) return 'Num_lock'
    if(n==145) return 'Scroll_lock'
    if(n==186) return ';'
    if(n==187) return '='
    if(n==188) return ','
    if(n==189) return '-'
    if(n==190) return '.'
    if(n==191) return '/'
    if(n==192) return '\`'
    if(n==219) return '['
    if(n==220) return '\\'
    if(n==221) return ']'
    if(n==222) return '\''
    if(n==224) return 'Meta'
    return ""
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多