我有一个关于OnKeyDown事件的问题。OnKeyDown事件提供了一个KeyCode,但我不知道具体给出了什么类型的代码。基本上,我使用String.FromCharCode方法从我认为是ASCII码的代码中获取真正的字符。它工作得很好,直到我试着用数字板上的数字。如果我使用上面的“w”键输入“2”,这是可以的,但是使用数字键盘中的“2”,给出的KeyCode是98 (这是'b‘Ascii代码)。
我正在看这个page,也有同样的问题。这个例子被认为是为了防止用户键入数字。它可以很好地处理第一个字符顶部的数字(因为没有更好的名称),但您可以使用数字键盘键入数字。
你知道问题出在哪里吗?(这真的是ascii代码吗?我是不是用错了事件?)...
谢谢..。
发布于 2011-01-25 13:16:56
要防止出现数字,请改用onkeypress
:
onkeypress="return PreventDigits(event);"
...
function PreventDigits(evt) {
evt = evt || window.event;
var keyCode = evt.keyCode || evt.which;7
var num = parseInt(String.fromCharCode(keyCode), 10);
return isNaN(num);
}
发布于 2011-01-25 13:08:31
从keycode返回的数字映射到下面定义的here集。这个集合并不对应于ASCII,但在某些方面是相似的。我会看一看,看看我是否能找到更多关于如何从数字中获取字符的信息。
此外,我还建议您使用e.which
而不是e.keyCode
作为进一步的评论,永远不要相信w3schools。
看看e.originalEvent.keyIdentifier
,它似乎包含了一些unicode。但它仍然将数字键盘映射到A-H,而不是0-9。我觉得它就是讨厌数字键盘。在某个地方应该有一个布尔型isnumpad标志。DOM3 API有一个布尔型数字键盘。
当您按数字键盘上的1时,显示为e.originalEvent.keyLocation === 3
。
KeyboardEvent.DOM_KEY_LOCATION_STANDARD常量KeyboardEvent.DOM_KEY_LOCATION_STANDARD的值为0x00。KeyboardEvent.DOM_KEY_LOCATION_LEFT常量KeyboardEvent.DOM_KEY_LOCATION_LEFT的值为0x01。KeyboardEvent.DOM_KEY_LOCATION_RIGHT常量KeyboardEvent.DOM_KEY_LOCATION_RIGHT的值为0x02。KeyboardEvent.DOM_KEY_LOCATION_NUMPAD常量KeyboardEvent.DOM_KEY_LOCATION_NUMPAD的值为0x03
所以keylocation numpad 3映射到DOM_KEY_LOCATION_NUMPAD,你必须手动捕捉===。您可以从数字键盘的键码中减去48,以将A-H映射为0-9
重大免责声明
这就是FF & Chrome所做的。上帝知道IE是做什么的,你可以自己征服那头野兽。我毫不怀疑它做了一些与W3规范完全不同的事情。
发布于 2011-01-25 13:10:52
keyCode
和charCode
是不同的动物。keyCode
与键盘和按键布局相关,而charCode
实际上给出了ascii字符代码。
此外,在关键事件的不同实现中有很多不好的地方。我一直喜欢这个页面作为一个很好的资源:http://unixpapa.com/js/key.html
编辑:正如雷诺斯所说,当w3schools出现在谷歌搜索中时,跳过它。
https://stackoverflow.com/questions/4793766
复制