hash (#) vs end charCode从Firefox的按键事件

hash (#) vs end charCode from keypress event in Firefox

本文关键字:Firefox 事件 charCode vs end hash      更新时间:2023-09-26

在Firefox(8)中,end键和#键具有相同的charCode(35)。有办法把它们区分开来吗?

我做了一个关于jsfiddle的快速演示。只要在输入框中输入,它就会显示您所按的charCode/键。

http://jsfiddle.net/PfAeW/

我正在构建一个富文本编辑器,其中#触发自动完成功能。我需要迎合国际用户(英国键盘),所以看看是否按下shift将不起作用。

DOM中的键事件有两种代码:charCode表示可打印键的字符,keyCode表示键盘上按下的物理键。

碰巧'#'的charCode为35,结束键的keyCode也为35,但它们具有完全不同的数字到含义的映射。

Mootools在事件上暴露了一个.code,该事件将两个代码合并,因此产生了混淆。

只是为了有一个答案…

看起来Mootools错误地表示了键按(在您的测试中也显示了以下错误的映射):

Key Pressed        How Moo Sees It
-----------        ---------------
end                #          35
.   (period)       delete     46
(   (left paren.)  down       40
'   (apos.)        right      39

但是,您可以使用Keyboard(加上Keys列表)并绑定到正确的序列。我不是很精通moo-tools,但是考虑到文档示例,我不明白为什么以下代码不能工作:

var kb = new Keyboard({
    defaultEventType: 'keypress'
});
kb.addEvents({
    'end': fnEnd,
});

免责声明:或多或少显示替代方案(或这是我基于文档的理解)而不是解决方案。我不知道上面的代码是否工作,但它应该。但是,我不确定如何将上述控件绑定到特定控件,因此这可能是Keyboard对直接绑定的一个限制。

你可以在keydown事件中检查shift (event.code == 16)键并保留它们的值,当按键被触发时,你可以确定codekeydown事件是16,现在是35 #真的被按下了。除非有另一种方法来检查shift是否按下:)